mirror of
				https://sourceware.org/git/glibc.git
				synced 2025-10-31 22:10:34 +03:00 
			
		
		
		
	aio_* bring in references to pread, which isn't in all the standards containing aio_* (as a reference from one library to another, this is a bug for dynamic as well as static linking). This patch fixes this by using __libc_pread instead, exporting that function from libc at symbol version GLIBC_PRIVATE; the code, with conditionals that may call either __pread64 or __libc_pread, becomes exactly analogous to that elsewhere in the same file that may call either __pwrite64 or __libc_pwrite. Tested for x86_64 and x86 (testsuite, and comparison of disassembly of installed shared libraries). libc changes because of the PLT entry for the newly exported __libc_pread; librt changes because of assertion line numbers and PLT rearrangement; other stripped installed shared libraries do not change. [BZ #18519] * posix/Versions (libc): Export __libc_pread at version GLIBC_PRIVATE. * sysdeps/pthread/aio_misc.c (handle_fildes_io): Call __libc_pread instead of pread. * conform/Makefile (test-xfail-POSIX/aio.h/linknamespace): Remove variable.
		
			
				
	
	
		
			141 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| libc {
 | |
|   GLIBC_2.0 {
 | |
|     # functions with special/multiple interfaces
 | |
|     __bsd_getpgrp; __getpgid; __setpgid;
 | |
| 
 | |
|     # functions with required interface outside normal name space
 | |
|     _exit;
 | |
| 
 | |
|     # functions used in other libraries
 | |
|     __sched_get_priority_max; __sched_get_priority_min;
 | |
|     __sched_getparam; __sched_getscheduler; __sched_setscheduler;
 | |
|     __sched_yield; __fork; __getpid; __wait;
 | |
| 
 | |
|     # functions used by libstdc++ 2.7.2
 | |
|     __waitpid;
 | |
| 
 | |
|     # global variables
 | |
|     __environ; _environ;
 | |
| 
 | |
|     # variables in normal name space
 | |
|     environ; optarg; opterr; optind; optopt;
 | |
|     re_max_failures; re_syntax_options;
 | |
| 
 | |
|     # a*
 | |
|     alarm;
 | |
| 
 | |
|     # c*
 | |
|     confstr;
 | |
| 
 | |
|     # e*
 | |
|     execl; execle; execlp; execv; execve; execvp; fexecve;
 | |
| 
 | |
|     # f*
 | |
|     fnmatch; fork; fpathconf; freeaddrinfo;
 | |
| 
 | |
|     # g*
 | |
|     getaddrinfo; getdtablesize; getegid; geteuid; getgid; getopt; getopt_long;
 | |
|     getopt_long_only; getpgid; getpgrp; getpid; getppid; getsid; getuid; glob;
 | |
|     glob_pattern_p; globfree; group_member;
 | |
| 
 | |
|     # n*
 | |
|     nanosleep;
 | |
| 
 | |
|     # p*
 | |
|     pathconf; pause; pselect;
 | |
| 
 | |
|     # r*
 | |
|     re_comp; re_compile_fastmap; re_compile_pattern; re_exec; re_match;
 | |
|     re_match_2; re_search; re_search_2; re_set_registers; re_set_syntax;
 | |
|     regcomp; regerror; regexec; regfree;
 | |
| 
 | |
|     # s*
 | |
|     sched_get_priority_max; sched_get_priority_min; sched_getparam;
 | |
|     sched_getscheduler; sched_rr_get_interval; sched_setparam;
 | |
|     sched_setscheduler; sched_yield; setegid; seteuid; setgid;
 | |
|     setpgid; setpgrp; setsid; setuid; sleep; sysconf;
 | |
| 
 | |
|     # t*
 | |
|     times;
 | |
| 
 | |
|     # u*
 | |
|     uname;
 | |
| 
 | |
|     # v*
 | |
|     vfork;
 | |
| 
 | |
|     # w*
 | |
|     wait; wait3; wait4; waitpid;
 | |
|   }
 | |
|   GLIBC_2.1 {
 | |
|     # functions used in other libraries
 | |
|     __pread64; __pwrite64;
 | |
| 
 | |
|     # g*
 | |
|     gai_strerror; getnameinfo; glob64; globfree64;
 | |
| 
 | |
|     # p*
 | |
|     pread; pread64; pwrite; pwrite64;
 | |
| 
 | |
|     # w*
 | |
|     waitid; wordexp; wordfree;
 | |
|   }
 | |
|   GLIBC_2.1.2 {
 | |
|     # functions used in other libraries
 | |
|     __vfork;
 | |
|   }
 | |
|   GLIBC_2.2 {
 | |
|     # p*
 | |
|     posix_spawn_file_actions_init; posix_spawn_file_actions_destroy;
 | |
|     posix_spawn_file_actions_addclose; posix_spawn_file_actions_addopen;
 | |
|     posix_spawn_file_actions_adddup2;
 | |
|     posix_spawnattr_init; posix_spawnattr_destroy;
 | |
|     posix_spawnattr_getsigdefault; posix_spawnattr_setsigdefault;
 | |
|     posix_spawnattr_getflags; posix_spawnattr_setflags;
 | |
|     posix_spawnattr_getpgroup; posix_spawnattr_setpgroup;
 | |
|     posix_spawnattr_setsigmask; posix_spawnattr_getsigmask;
 | |
|     posix_spawn; posix_spawnp; posix_spawnattr_getschedpolicy;
 | |
|     posix_spawnattr_setschedpolicy; posix_spawnattr_getschedparam;
 | |
|     posix_spawnattr_setschedparam;
 | |
| 
 | |
|     # Used in macros.
 | |
|     __sysconf;
 | |
|   }
 | |
|   GLIBC_2.2.3 {
 | |
|     # Extended Interface.
 | |
|     fnmatch;
 | |
|   }
 | |
|   GLIBC_2.2.6 {
 | |
|     # For syscall wrapper
 | |
|     __nanosleep;
 | |
|   }
 | |
|   GLIBC_2.3.2 {
 | |
|     # Note that these symbols appear in sysdeps/unix/sysv/linux/Versions
 | |
|     # under GLIBC_2.0; the first instance in the script is taken as the
 | |
|     # default, so linux configurations put them in GLIBC_2.0 while other
 | |
|     # configuration put them in GLIBC_2.3.2.
 | |
|     getresgid; getresuid; setresgid; setresuid;
 | |
|   }
 | |
|   GLIBC_2.3.3 {
 | |
|     sched_getaffinity; sched_setaffinity;
 | |
|   }
 | |
|   GLIBC_2.3.4 {
 | |
|     regexec;
 | |
|   }
 | |
|   GLIBC_2.6 {
 | |
|     __sched_cpucount;
 | |
|   }
 | |
|   GLIBC_2.7 {
 | |
|     __sched_cpualloc; __sched_cpufree;
 | |
|   }
 | |
|   GLIBC_2.10 {
 | |
|     __posix_getopt;
 | |
|   }
 | |
|   GLIBC_2.11 {
 | |
|     execvpe;
 | |
|   }
 | |
|   GLIBC_PRIVATE {
 | |
|     __libc_fork; __libc_pread; __libc_pwrite;
 | |
|   }
 | |
| }
 |