diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2020-06-26 16:06:49 -0300 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2020-12-10 17:42:37 -0300 |
commit | 720480934ab9107714f1ffc29222dfb5d3bc5b1d (patch) | |
tree | 3851a6f8fe50b3548e667651805dadb7c242f43b /sysdeps/unix/sysv/linux/i386 | |
parent | 880433de13fa31e52587720f81b762a6c7797e4e (diff) | |
download | glibc-720480934ab9107714f1ffc29222dfb5d3bc5b1d.tar.gz glibc-720480934ab9107714f1ffc29222dfb5d3bc5b1d.tar.xz glibc-720480934ab9107714f1ffc29222dfb5d3bc5b1d.zip |
linux: Consolidate brk implementation
It removes all the arch-specific assembly implementation. The outliers are alpha, where its kernel ABI explict return -ENOMEM in case of failure; and i686, where it can't use "call *%gs:SYSINFO_OFFSET" during statup in static PIE. Also some ABIs exports an additional ___brk_addr symbol and to handle it an internal HAVE_INTERNAL_BRK_ADDR_SYMBOL is added. Checked on x86_64-linux-gnu, i686-linux-gnu, adn with builsd for the affected ABIs. Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386')
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/brk.c | 23 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/i386/sysdep.h | 3 |
2 files changed, 4 insertions, 22 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/brk.c b/sysdeps/unix/sysv/linux/i386/brk.c index 021b6d37a0..8d7b7d42cc 100644 --- a/sysdeps/unix/sysv/linux/i386/brk.c +++ b/sysdeps/unix/sysv/linux/i386/brk.c @@ -21,25 +21,4 @@ # define I386_USE_SYSENTER 0 #endif -#include <errno.h> -#include <unistd.h> -#include <sysdep.h> - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -/* Old braindamage in GCC's crtstuff.c requires this symbol in an attempt - to work around different old braindamage in the old Linux ELF dynamic - linker. */ -weak_alias (__curbrk, ___brk_addr) - -int -__brk (void *addr) -{ - void *newbrk = (void *) INTERNAL_SYSCALL_CALL (brk, addr); - __curbrk = newbrk; - if (newbrk < addr) - return INLINE_SYSCALL_ERROR_RETURN_VALUE (ENOMEM); - return 0; -} -weak_alias (__brk, brk) +#include <sysdeps/unix/sysv/linux/brk.c> diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index bfb5de3b45..addd13dff1 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -291,6 +291,9 @@ struct libc_do_syscall_args # define HAVE_TIME_VSYSCALL "__vdso_time" # define HAVE_CLOCK_GETRES_VSYSCALL "__vdso_clock_getres" +# undef HAVE_INTERNAL_BRK_ADDR_SYMBOL +# define HAVE_INTERNAL_BRK_ADDR_SYMBOL 1 + /* Define a macro which expands inline into the wrapper code for a system call. This use is for internal calls that do not need to handle errors normally. It will never touch errno. This returns just what the kernel |