diff options
| author | Keith M Wesolowski <wesolows@foobazco.org> | 2013-05-08 18:18:49 +0000 |
|---|---|---|
| committer | Keith M Wesolowski <wesolows@foobazco.org> | 2013-05-08 18:18:49 +0000 |
| commit | 43840e901cacf50a9bb41148069e34ca307524e8 (patch) | |
| tree | 2836162f69bba2534e8b9acf9797e5892f103258 /usr/src/uts/intel | |
| parent | abd43b3991c3becf4fd3cc1a370aeafdc8749a30 (diff) | |
| parent | 5dbfd19ad5fcc2b779f40f80fa05c1bd28fd0b4e (diff) | |
| download | illumos-joyent-43840e901cacf50a9bb41148069e34ca307524e8.tar.gz | |
[illumos-gate merge]
commit 5dbfd19ad5fcc2b779f40f80fa05c1bd28fd0b4e
3713 Implement accept4()
3714 Implement pipe2()
3715 Implement dup3()
3716 Implement mkostemp() and mkostemps()
3719 so_socketpair syscall should preserve FD_CLOEXEC flag
commit 6136c589445a3ea081bd34ab72db1060875b6bcc
3722 link-editor is over restrictive of R_AMD64_32 addends
Conflicts:
usr/src/lib/libc/sparcv9/Makefile.com [copyright]
usr/src/lib/libc/sparc/Makefile.com [copyright]
usr/src/lib/libc/i386/Makefile.com [copyright]
Diffstat (limited to 'usr/src/uts/intel')
| -rw-r--r-- | usr/src/uts/intel/amd64/krtld/doreloc.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/usr/src/uts/intel/amd64/krtld/doreloc.c b/usr/src/uts/intel/amd64/krtld/doreloc.c index a74f480f26..aac6f6dcc7 100644 --- a/usr/src/uts/intel/amd64/krtld/doreloc.c +++ b/usr/src/uts/intel/amd64/krtld/doreloc.c @@ -175,7 +175,13 @@ const Rel_entry reloc_table[R_AMD64_NUM] = { * entry */ -#define HIBITS 0xffffffff80000000ULL + +/* + * Bits that must be cleared or identical for a value to act as if extended in + * the given way. + */ +#define ZEROEXBITS 0xffffffff00000000ULL +#define SIGNEXBITS 0xffffffff80000000ULL #if defined(_KERNEL) #define lml 0 /* Needed by arglist of REL_ERR_* macros */ @@ -244,10 +250,11 @@ do_reloc_rtld(uchar_t rtype, uchar_t *off, Xword *value, const char *sym, */ if (rtype == R_AMD64_32) { /* - * Verify that this value will 'zero-extend', this - * requires that the upper 33bits all be 'zero'. + * Verify that this value will act as a zero-extended + * unsigned 32 bit value. That is, that the upper + * 32 bits are zero. */ - if ((*value & HIBITS) != 0) { + if ((*value & ZEROEXBITS) != 0) { /* * To keep chkmsg() happy: * MSG_INTL(MSG_REL_NOFIT) @@ -258,12 +265,12 @@ do_reloc_rtld(uchar_t rtype, uchar_t *off, Xword *value, const char *sym, } else if ((rtype == R_AMD64_32S) || (rtype == R_AMD64_PC32) || (rtype == R_AMD64_GOTPCREL) || (rtype == R_AMD64_GOTPC32)) { /* - * Verify that this value will properly sign extend. - * This is true of the upper 33bits are all either - * 'zero' or all 'one'. + * Verify that this value will act as a sign-extended + * signed 32 bit value, that is that the upper 33 bits + * are either all zero or all one. */ - if (((*value & HIBITS) != HIBITS) && - ((*value & HIBITS) != 0)) { + if (((*value & SIGNEXBITS) != SIGNEXBITS) && + ((*value & SIGNEXBITS) != 0)) { /* * To keep chkmsg() happy: * MSG_INTL(MSG_REL_NOFIT) |
