From c3966b88eeb1e0b5726ca16a70a94269d40ee152 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Fri, 31 Jul 1998 11:14:46 +0000 Subject: [PATCH] Update. 1998-07-31 11:10 Ulrich Drepper * elf/elf.h: Add lots of new symbols from Irix and Solaris. * sysdeps/unix/sysv/linux/sigstack.c: Include stddef.h to get NULL definition. 1998-07-31 Thorsten Kukuk * sunrpc/xcrypt.c: Use only the first 8 characters of the password. 1998-07-30 21:06 -0400 Zack Weinberg * sysdeps/generic/glob.c: Undefine strdup before defining it, because bits/string2.h may have defined it already. 1998-07-29 Andreas Schwab * stdio-common/vfscanf.c: Optimize looking for type modifiers. Fix recognition of 'a' modifier vs. 'a' format. (TYPEMOD): Removed. * stdio-common/printf-parse.h (parse_one_spec): Optimize looking for type modifiers. Fix recognition of 'hh' modifier. 1998-07-31 Thorsten Kukuk * sunrpc/svc_unix.c: Fix typo. 1998-07-31 Thorsten Kukuk * sysdeps/unix/sysv/linux/recvmsg.c: Don't check for SCM_CREDS before syscall. --- ChangeLog | 34 +++ elf/elf.h | 338 ++++++++++++++++++++++++----- stdio-common/printf-parse.h | 94 ++++---- stdio-common/vfscanf.c | 141 ++++++------ sunrpc/svc_unix.c | 2 +- sunrpc/xcrypt.c | 2 +- sysdeps/generic/glob.c | 1 + sysdeps/unix/sysv/linux/recvmsg.c | 58 ++--- sysdeps/unix/sysv/linux/sigstack.c | 1 + 9 files changed, 450 insertions(+), 221 deletions(-) diff --git a/ChangeLog b/ChangeLog index de0df96196..7e2e42b165 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,37 @@ +1998-07-31 11:10 Ulrich Drepper + + * elf/elf.h: Add lots of new symbols from Irix and Solaris. + + * sysdeps/unix/sysv/linux/sigstack.c: Include stddef.h to get NULL + definition. + +1998-07-31 Thorsten Kukuk + + * sunrpc/xcrypt.c: Use only the first 8 characters of the password. + +1998-07-30 21:06 -0400 Zack Weinberg + + * sysdeps/generic/glob.c: Undefine strdup before defining it, + because bits/string2.h may have defined it already. + +1998-07-29 Andreas Schwab + + * stdio-common/vfscanf.c: Optimize looking for type modifiers. + Fix recognition of 'a' modifier vs. 'a' format. + (TYPEMOD): Removed. + + * stdio-common/printf-parse.h (parse_one_spec): Optimize looking + for type modifiers. Fix recognition of 'hh' modifier. + +1998-07-31 Thorsten Kukuk + + * sunrpc/svc_unix.c: Fix typo. + +1998-07-31 Thorsten Kukuk + + * sysdeps/unix/sysv/linux/recvmsg.c: Don't check for SCM_CREDS before + syscall. + 1998-07-30 12:38 Ulrich Drepper * sysdeps/i386/ffs.c: Add ffsl entry point. diff --git a/elf/elf.h b/elf/elf.h index 3780054aca..4974c08edd 100644 --- a/elf/elf.h +++ b/elf/elf.h @@ -180,6 +180,7 @@ typedef struct #define EM_OLD_ALPHA 41 /* Digital Alpha */ #define EM_SH 42 /* Hitachi SH */ #define EM_SPARCV9 43 /* SPARC v9 64-bit */ +#define EM_NUM 44 /* If it is necessary to assign new unofficial EM_* values, please pick large random numbers (0x8523, 0xa7f2, etc.) to minimize the @@ -235,28 +236,30 @@ typedef struct /* Legal values for sh_type (section type). */ -#define SHT_NULL 0 /* Section header table entry unused */ -#define SHT_PROGBITS 1 /* Program data */ -#define SHT_SYMTAB 2 /* Symbol table */ -#define SHT_STRTAB 3 /* String table */ -#define SHT_RELA 4 /* Relocation entries with addends */ -#define SHT_HASH 5 /* Symbol hash table */ -#define SHT_DYNAMIC 6 /* Dynamic linking information */ -#define SHT_NOTE 7 /* Notes */ -#define SHT_NOBITS 8 /* Program space with no data (bss) */ -#define SHT_REL 9 /* Relocation entries, no addends */ -#define SHT_SHLIB 10 /* Reserved */ -#define SHT_DYNSYM 11 /* Dynamic linker symbol table */ -#define SHT_NUM 12 /* Number of defined types. */ -#define SHT_LOSUNW 0x6ffffffd /* Sun-specific low bound. */ -#define SHT_GNU_verdef 0x6ffffffd /* Version definition section. */ -#define SHT_GNU_verneed 0x6ffffffe /* Version needs section. */ -#define SHT_GNU_versym 0x6fffffff /* Version symbol table. */ -#define SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */ -#define SHT_LOPROC 0x70000000 /* Start of processor-specific */ -#define SHT_HIPROC 0x7fffffff /* End of processor-specific */ -#define SHT_LOUSER 0x80000000 /* Start of application-specific */ -#define SHT_HIUSER 0x8fffffff /* End of application-specific */ +#define SHT_NULL 0 /* Section header table entry unused */ +#define SHT_PROGBITS 1 /* Program data */ +#define SHT_SYMTAB 2 /* Symbol table */ +#define SHT_STRTAB 3 /* String table */ +#define SHT_RELA 4 /* Relocation entries with addends */ +#define SHT_HASH 5 /* Symbol hash table */ +#define SHT_DYNAMIC 6 /* Dynamic linking information */ +#define SHT_NOTE 7 /* Notes */ +#define SHT_NOBITS 8 /* Program space with no data (bss) */ +#define SHT_REL 9 /* Relocation entries, no addends */ +#define SHT_SHLIB 10 /* Reserved */ +#define SHT_DYNSYM 11 /* Dynamic linker symbol table */ +#define SHT_NUM 12 /* Number of defined types. */ +#define SHT_LOSUNW 0x6ffffffb /* Sun-specific low bound. */ +#define SHT_SUNW_COMDAT 0x6ffffffb +#define SHT_SUNW_syminfo 0x6ffffffc +#define SHT_GNU_verdef 0x6ffffffd /* Version definition section. */ +#define SHT_GNU_verneed 0x6ffffffe /* Version needs section. */ +#define SHT_GNU_versym 0x6fffffff /* Version symbol table. */ +#define SHT_HISUNW 0x6fffffff /* Sun-specific high bound. */ +#define SHT_LOPROC 0x70000000 /* Start of processor-specific */ +#define SHT_HIPROC 0x7fffffff /* End of processor-specific */ +#define SHT_LOUSER 0x80000000 /* Start of application-specific */ +#define SHT_HIUSER 0x8fffffff /* End of application-specific */ /* Legal values for sh_flags (section flags). */ @@ -426,6 +429,16 @@ typedef struct #define NT_PRSTATUS 1 /* Contains copy of prstatus struct */ #define NT_FPREGSET 2 /* Contains copy of fpregset struct */ #define NT_PRPSINFO 3 /* Contains copy of prpsinfo struct */ +#define NT_PRXREG 4 /* Contains copy of prxregset struct */ +#define NT_PLATFORM 5 /* String from sysinfo(SI_PLATFORM) */ +#define NT_AUXV 6 /* Contains copy of auxv array */ +#define NT_GWINDOWS 7 /* Contains copy of gwindows struct */ +#define NT_PSTATUS 10 /* Contains copy of pstatus struct */ +#define NT_PSINFO 13 /* Contains copy of psinfo struct */ +#define NT_PRCRED 14 /* Contains copy of prcred struct */ +#define NT_UTSNAME 15 /* Contains copy of utsname struct */ +#define NT_LWPSTATUS 16 /* Contains copy of lwpstatus struct */ +#define NT_LWPSINFO 17 /* Contains copy of lwpinfo struct */ /* Legal values for the note segment descriptor types for object files. */ @@ -865,13 +878,25 @@ typedef struct /* Legal values for e_flags field of Elf32_Ehdr. */ -#define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used */ -#define EF_MIPS_PIC 2 /* Contains PIC code */ -#define EF_MIPS_CPIC 4 /* Uses PIC calling sequence */ -#define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level */ +#define EF_MIPS_NOREORDER 1 /* A .noreorder directive was used */ +#define EF_MIPS_PIC 2 /* Contains PIC code */ +#define EF_MIPS_CPIC 4 /* Uses PIC calling sequence */ +#define EF_MIPS_XGOT 8 +#define EF_MIPS_64BIT_WHIRL 16 +#define EF_MIPS_ABI2 32 +#define EF_MIPS_ABI_ON32 64 +#define EF_MIPS_ARCH 0xf0000000 /* MIPS architecture level */ /* Legal values for MIPS architecture level. */ +#define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ +#define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ +#define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ +#define EF_MIPS_ARCH_4 0x30000000 /* -mips4 code. */ +#define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */ + +/* The following are non-official names and should ot be used. */ + #define E_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ #define E_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ #define E_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ @@ -888,19 +913,69 @@ typedef struct /* Legal values for sh_type field of Elf32_Shdr. */ -#define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link */ -#define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols */ -#define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes */ -#define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */ -#define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging information */ -#define SHT_MIPS_REGINFO 0x70000006 /* Register usage information */ -#define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */ -#define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */ -#define SHT_MIPS_EVENTS 0x70000021 /* Event section. */ +#define SHT_MIPS_LIBLIST 0x70000000 /* Shared objects used in link */ +#define SHT_MIPS_MSYM 0x70000001 +#define SHT_MIPS_CONFLICT 0x70000002 /* Conflicting symbols */ +#define SHT_MIPS_GPTAB 0x70000003 /* Global data area sizes */ +#define SHT_MIPS_UCODE 0x70000004 /* Reserved for SGI/MIPS compilers */ +#define SHT_MIPS_DEBUG 0x70000005 /* MIPS ECOFF debugging information*/ +#define SHT_MIPS_REGINFO 0x70000006 /* Register usage information */ +#define SHT_MIPS_PACKAGE 0x70000007 +#define SHT_MIPS_PACKSYM 0x70000008 +#define SHT_MIPS_RELD 0x70000009 +#define SHT_MIPS_IFACE 0x7000000b +#define SHT_MIPS_CONTENT 0x7000000c +#define SHT_MIPS_OPTIONS 0x7000000d /* Miscellaneous options. */ +#define SHT_MIPS_SHDR 0x70000010 +#define SHT_MIPS_FDESC 0x70000011 +#define SHT_MIPS_EXTSYM 0x70000012 +#define SHT_MIPS_DENSE 0x70000013 +#define SHT_MIPS_PDESC 0x70000014 +#define SHT_MIPS_LOCSYM 0x70000015 +#define SHT_MIPS_AUXSYM 0x70000016 +#define SHT_MIPS_OPTSYM 0x70000017 +#define SHT_MIPS_LOCSTR 0x70000018 +#define SHT_MIPS_LINE 0x70000019 +#define SHT_MIPS_RFDESC 0x7000001a +#define SHT_MIPS_DELTASYM 0x7000001b +#define SHT_MIPS_DELTAINST 0x7000001c +#define SHT_MIPS_DELTACLASS 0x7000001d +#define SHT_MIPS_DWARF 0x7000001e /* DWARF debugging information. */ +#define SHT_MIPS_DELTADECL 0x7000001f +#define SHT_MIPS_SYMBOL_LIB 0x70000020 +#define SHT_MIPS_EVENTS 0x70000021 /* Event section. */ +#define SHT_MIPS_TRANSLATE 0x70000022 +#define SHT_MIPS_PIXIE 0x70000023 +#define SHT_MIPS_XLATE 0x70000024 +#define SHT_MIPS_XLATE_DEBUG 0x70000025 +#define SHT_MIPS_WHIRL 0x70000026 +#define SHT_MIPS_EH_REGION 0x70000027 +#define SHT_MIPS_XLATE_OLD 0x70000028 +#define SHT_MIPS_PDR_EXCEPTION 0x70000029 /* Legal values for sh_flags field of Elf32_Shdr. */ -#define SHF_MIPS_GPREL 0x10000000 /* Must be part of global data area */ +#define SHF_MIPS_GPREL 0x10000000 /* Must be part of global data area */ +#define SHF_MIPS_MERGE 0x20000000 +#define SHF_MIPS_ADDR 0x40000000 +#define SHF_MIPS_STRINGS 0x80000000 +#define SHF_MIPS_NOSTRIP 0x08000000 +#define SHF_MIPS_LOCAL 0x04000000 +#define SHF_MIPS_NAMES 0x02000000 +#define SHF_MIPS_NODUPE 0x01000000 + + +/* Symbol tables. */ + +/* MIPS specific values for `st_other'. */ +#define STO_DEFAULT 0x0 +#define STO_INTERNAL 0x1 +#define STO_HIDDEN 0x2 +#define STO_PROTECTED 0x3 +#define STO_SC_ALIGN_UNUSED 0xff + +/* MIPS specific values for `st_info'. */ +#define STB_SPLIT_COMMON 13 /* Entries found in sections of type SHT_MIPS_GPTAB. */ @@ -927,21 +1002,107 @@ typedef struct Elf32_Sword ri_gp_value; /* $gp register value */ } Elf32_RegInfo; +/* Entries found in sections of type SHT_MIPS_OPTIONS. */ + +typedef struct +{ + unsigned char kind; /* Determines interpretation of the + variable part of descriptor. */ + unsigned char size; /* Size of descriptor, including header. */ + Elf32_Section section; /* Section header index of section affected, + 0 for global options. */ + Elf32_Word info; /* Kind-specific information. */ +} Elf_Options; + +/* Values for `kind' field in Elf_Options. */ + +#define ODK_NULL 0 /* Undefined. */ +#define ODK_REGINFO 1 /* Register usage information. */ +#define ODK_EXCEPTIONS 2 /* Exception processing options. */ +#define ODK_PAD 3 /* Section padding options. */ +#define ODK_HWPATCH 4 /* Hardware workarounds performed */ +#define ODK_FILL 5 /* record the fill value used by the linker. */ +#define ODK_TAGS 6 /* reserve space for desktop tools to write. */ +#define ODK_HWAND 7 /* HW workarounds. 'AND' bits when merging. */ +#define ODK_HWOR 8 /* HW workarounds. 'OR' bits when merging. */ + +/* Values for `info' in Elf_Options for ODK_EXCEPTIONS entries. */ + +#define OEX_FPU_MIN 0x1f /* FPE's which MUST be enabled. */ +#define OEX_FPU_MAX 0x1f00 /* FPE's which MAY be enabled. */ +#define OEX_PAGE0 0x10000 /* page zero must be mapped. */ +#define OEX_SMM 0x20000 /* Force sequential memory mode? */ +#define OEX_FPDBUG 0x40000 /* Force floating point debug mode? */ +#define OEX_PRECISEFP OEX_FPDBUG +#define OEX_DISMISS 0x80000 /* Dismiss invalid address faults? */ + +#define OEX_FPU_INVAL 0x10 +#define OEX_FPU_DIV0 0x08 +#define OEX_FPU_OFLO 0x04 +#define OEX_FPU_UFLO 0x02 +#define OEX_FPU_INEX 0x01 + +/* Masks for `info' in Elf_Options for an ODK_HWPATCH entry. */ + +#define OHW_R4KEOP 0x1 /* R4000 end-of-page patch. */ +#define OHW_R8KPFETCH 0x2 /* may need R8000 prefetch patch. */ +#define OHW_R5KEOP 0x4 /* R5000 end-of-page patch. */ +#define OHW_R5KCVTL 0x8 /* R5000 cvt.[ds].l bug. clean=1. */ + +#define OPAD_PREFIX 0x1 +#define OPAD_POSTFIX 0x2 +#define OPAD_SYMBOL 0x4 + +/* Entry found in `.options' section. */ + +typedef struct +{ + Elf32_Word hwp_flags1; /* Extra flags. */ + Elf32_Word hwp_flags2; /* Extra flags. */ +} Elf_Options_Hw; + +/* Masks for `info' in ElfOptions for ODK_HWAND and ODK_HWOR entries. */ + +#define OHWA0_R4KEOP_CHECKED 0x00000001 +#define OHWA1_R4KEOP_CLEAN 0x00000002 + /* MIPS relocs. */ -#define R_MIPS_NONE 0 /* No reloc */ -#define R_MIPS_16 1 /* Direct 16 bit */ -#define R_MIPS_32 2 /* Direct 32 bit */ -#define R_MIPS_REL32 3 /* PC relative 32 bit */ -#define R_MIPS_26 4 /* Direct 26 bit shifted */ -#define R_MIPS_HI16 5 /* High 16 bit */ -#define R_MIPS_LO16 6 /* Low 16 bit */ -#define R_MIPS_GPREL16 7 /* GP relative 16 bit */ -#define R_MIPS_LITERAL 8 /* 16 bit literal entry */ -#define R_MIPS_GOT16 9 /* 16 bit GOT entry */ -#define R_MIPS_PC16 10 /* PC relative 16 bit */ -#define R_MIPS_CALL16 11 /* 16 bit GOT entry for function */ -#define R_MIPS_GPREL32 12 /* GP relative 32 bit */ +#define R_MIPS_NONE 0 /* No reloc */ +#define R_MIPS_16 1 /* Direct 16 bit */ +#define R_MIPS_32 2 /* Direct 32 bit */ +#define R_MIPS_REL32 3 /* PC relative 32 bit */ +#define R_MIPS_26 4 /* Direct 26 bit shifted */ +#define R_MIPS_HI16 5 /* High 16 bit */ +#define R_MIPS_LO16 6 /* Low 16 bit */ +#define R_MIPS_GPREL16 7 /* GP relative 16 bit */ +#define R_MIPS_LITERAL 8 /* 16 bit literal entry */ +#define R_MIPS_GOT16 9 /* 16 bit GOT entry */ +#define R_MIPS_PC16 10 /* PC relative 16 bit */ +#define R_MIPS_CALL16 11 /* 16 bit GOT entry for function */ +#define R_MIPS_GPREL32 12 /* GP relative 32 bit */ + +#define R_MIPS_SHIFT5 16 +#define R_MIPS_SHIFT6 17 +#define R_MIPS_64 18 +#define R_MIPS_GOT_DISP 19 +#define R_MIPS_GOT_PAGE 20 +#define R_MIPS_GOT_OFST 21 +#define R_MIPS_GOT_HI16 22 +#define R_MIPS_GOT_LO16 23 +#define R_MIPS_SUB 24 +#define R_MIPS_INSERT_A 25 +#define R_MIPS_INSERT_B 26 +#define R_MIPS_DELETE 27 +#define R_MIPS_HIGHER 28 +#define R_MIPS_HIGHEST 29 +#define R_MIPS_CALL_HI16 30 +#define R_MIPS_CALL_LO16 31 +#define R_MIPS_SCN_DISP 32 +#define R_MIPS_REL16 33 +#define R_MIPS_ADD_IMMEDIATE 34 +#define R_MIPS_PJUMP 35 +#define R_MIPS_RELGOT 36 /* Legal values for p_type field of Elf32_Phdr. */ @@ -949,6 +1110,10 @@ typedef struct #define PT_MIPS_RTPROC 0x70000001 /* Runtime procedure table. */ #define PT_MIPS_OPTIONS 0x70000002 +/* Special program header types. */ + +#define PF_MIPS_LOCAL 0x10000000 + /* Legal values for d_tag field of Elf32_Dyn. */ #define DT_MIPS_RLD_VERSION 0x70000001 /* Runtime linker interface version */ @@ -957,6 +1122,7 @@ typedef struct #define DT_MIPS_IVERSION 0x70000004 /* Version string (string tbl index) */ #define DT_MIPS_FLAGS 0x70000005 /* Flags */ #define DT_MIPS_BASE_ADDRESS 0x70000006 /* Base address */ +#define DT_MIPS_MSYM 0x70000007 #define DT_MIPS_CONFLICT 0x70000008 /* Address of CONFLICT section */ #define DT_MIPS_LIBLIST 0x70000009 /* Address of LIBLIST section */ #define DT_MIPS_LOCAL_GOTNO 0x7000000a /* Number of local GOT entries */ @@ -967,7 +1133,42 @@ typedef struct #define DT_MIPS_GOTSYM 0x70000013 /* First GOT entry in DYNSYM */ #define DT_MIPS_HIPAGENO 0x70000014 /* Number of GOT page table entries */ #define DT_MIPS_RLD_MAP 0x70000016 /* Address of run time loader map. */ -#define DT_MIPS_NUM 0x17 +#define DT_MIPS_DELTA_CLASS 0x70000017 /* Delta C++ class definition. */ +#define DT_MIPS_DELTA_CLASS_NO 0x70000018 /* Number of entries in + DT_MIPS_DELTA_CLASS. */ +#define DT_MIPS_DELTA_INSTANCE 0x70000019 /* Delta C++ class instances. */ +#define DT_MIPS_DELTA_INSTANCE_NO 0x7000001a /* Number of entries in + DT_MIPS_DELTA_INSTANCE. */ +#define DT_MIPS_DELTA_RELOC 0x7000001b /* Delta relocations. */ +#define DT_MIPS_DELTA_RELOC_NO 0x7000001c /* Number of entries in + DT_MIPS_DELTA_RELOC. */ +#define DT_MIPS_DELTA_SYM 0x7000001d /* Delta symbols that Delta + relocations refer to. */ +#define DT_MIPS_DELTA_SYM_NO 0x7000001e /* Number of entries in + DT_MIPS_DELTA_SYM. */ +#define DT_MIPS_DELTA_CLASSSYM 0x70000020 /* Delta symbols that hold the + class declaration. */ +#define DT_MIPS_DELTA_CLASSSYM_NO 0x70000021 /* Number of entries in + DT_MIPS_DELTA_CLASSSYM. */ +#define DT_MIPS_CXX_FLAGS 0x70000022 /* Flags indicating for C++ flavor. */ +#define DT_MIPS_PIXIE_INIT 0x70000023 +#define DT_MIPS_SYMBOL_LIB 0x70000024 +#define DT_MIPS_LOCALPAGE_GOTIDX 0x70000025 +#define DT_MIPS_LOCAL_GOTIDX 0x70000026 +#define DT_MIPS_HIDDEN_GOTIDX 0x70000027 +#define DT_MIPS_PROTECTED_GOTIDX 0x70000028 +#define DT_MIPS_OPTIONS 0x70000029 /* Address of .options. */ +#define DT_MIPS_INTERFACE 0x7000002a /* Address of .interface. */ +#define DT_MIPS_DYNSTR_ALIGN 0x7000002b +#define DT_MIPS_INTERFACE_SIZE 0x7000002c /* Size of the .interface section. */ +#define DT_MIPS_RLD_TEXT_RESOLVE_ADDR 0x7000002d /* Address of rld_text_rsolve + function stored in GOT. */ +#define DT_MIPS_PERF_SUFFIX 0x7000002e /* Default suffix of dso to be added + by rld on dlopen() calls. */ +#define DT_MIPS_COMPACT_SIZE 0x7000002f /* (O32)Size of compact rel section. */ +#define DT_MIPS_GP_VALUE 0x70000030 /* GP value for aux GOTs. */ +#define DT_MIPS_AUX_DYNAMIC 0x70000031 /* Address of aux .dynamic. */ +#define DT_MIPS_NUM 0x32 /* Legal values for DT_MIPS_FLAG Elf32_Dyn entry. */ @@ -975,22 +1176,49 @@ typedef struct #define RHF_QUICKSTART (1 << 0) /* Use quickstart */ #define RHF_NOTPOT (1 << 1) /* Hash size not power of 2 */ #define RHF_NO_LIBRARY_REPLACEMENT (1 << 2) /* Ignore LD_LIBRARY_PATH */ +#define RHF_NO_MOVE (1 << 3) +#define RHF_SGI_ONLY (1 << 4) +#define RHF_GUARANTEE_INIT (1 << 5) +#define RHF_DELTA_C_PLUS_PLUS (1 << 6) +#define RHF_GUARANTEE_START_INIT (1 << 7) +#define RHF_PIXIE (1 << 8) +#define RHF_DEFAULT_DELAY_LOAD (1 << 9) +#define RHF_REQUICKSTART (1 << 10) +#define RHF_REQUICKSTARTED (1 << 11) +#define RHF_CORD (1 << 12) +#define RHF_NO_UNRES_UNDEF (1 << 13) +#define RHF_RLD_ORDER_SAFE (1 << 14) /* Entries found in sections of type SHT_MIPS_LIBLIST. */ typedef struct { - Elf32_Word l_name; /* Name (string table index) */ - Elf32_Word l_time_stamp; /* Timestamp */ - Elf32_Word l_checksum; /* Checksum */ - Elf32_Word l_version; /* Interface version */ - Elf32_Word l_flags; /* Flags */ + Elf32_Word l_name; /* Name (string table index) */ + Elf32_Word l_time_stamp; /* Timestamp */ + Elf32_Word l_checksum; /* Checksum */ + Elf32_Word l_version; /* Interface version */ + Elf32_Word l_flags; /* Flags */ } Elf32_Lib; +typedef struct +{ + Elf64_Word l_name; /* Name (string table index) */ + Elf64_Word l_time_stamp; /* Timestamp */ + Elf64_Word l_checksum; /* Checksum */ + Elf64_Word l_version; /* Interface version */ + Elf64_Word l_flags; /* Flags */ +} Elf64_Lib; + + /* Legal values for l_flags. */ +#define LL_NONE 0 #define LL_EXACT_MATCH (1 << 0) /* Require exact match */ #define LL_IGNORE_INT_VER (1 << 1) /* Ignore interface version */ +#define LL_REQUIRE_MINOR (1 << 2) +#define LL_EXPORTS (1 << 3) +#define LL_DELAY_LOAD (1 << 4) +#define LL_DELTA (1 << 5) /* Entries found in sections of type SHT_MIPS_CONFLICT. */ diff --git a/stdio-common/printf-parse.h b/stdio-common/printf-parse.h index 61468ebdd3..4f217abfd3 100644 --- a/stdio-common/printf-parse.h +++ b/stdio-common/printf-parse.h @@ -271,54 +271,54 @@ parse_one_spec (const UCHAR_T *format, size_t posn, struct printf_spec *spec, spec->info.is_long = 0; spec->info.is_char = 0; - if (*format == L_('h') || *format == L_('l') || *format == L_('L') || - *format == L_('Z') || *format == L_('q') || *format == L_('z') || - *format == L_('t') || *format == L_('j')) - switch (*format++) - { - case L_('h'): - /* int's are short int's. */ - if (spec->info.is_short == 0) - spec->info.is_short = 1; - else - { - spec->info.is_short = 0; - spec->info.is_char = 1; - } + switch (*format++) + { + case L_('h'): + /* ints are short ints or chars. */ + if (*format != L_('h')) + spec->info.is_short = 1; + else + { + ++format; + spec->info.is_char = 1; + } + break; + case L_('l'): + /* ints are long ints. */ + spec->info.is_long = 1; + if (*format != L_('l')) break; - case L_('l'): - /* int's are long int's. */ - spec->info.is_long = 1; - if (*format != L_('l')) - break; - ++format; - /* FALLTHROUGH */ - case L_('L'): - /* double's are long double's, and int's are long long int's. */ - case L_('q'): - /* 4.4 uses this for long long. */ - spec->info.is_long_double = 1; - break; - case L_('z'): - case L_('Z'): - /* int's are size_t's. */ - assert (sizeof (size_t) <= sizeof (unsigned long long int)); - spec->info.is_longlong = sizeof (size_t) > sizeof (unsigned long int); - spec->info.is_long = sizeof (size_t) > sizeof (unsigned int); - break; - case L_('t'): - assert (sizeof (ptrdiff_t) <= sizeof (unsigned long long int)); - spec->info.is_longlong = (sizeof (ptrdiff_t) - > sizeof (unsigned long int)); - spec->info.is_long = sizeof (ptrdiff_t) > sizeof (unsigned int); - break; - case L_('j'): - assert (sizeof (intmax_t) <= sizeof (unsigned long long int)); - spec->info.is_longlong = (sizeof (intmax_t) - > sizeof (unsigned long int)); - spec->info.is_long = sizeof (intmax_t) > sizeof (unsigned int); - break; - } + ++format; + /* FALLTHROUGH */ + case L_('L'): + /* doubles are long doubles, and ints are long long ints. */ + case L_('q'): + /* 4.4 uses this for long long. */ + spec->info.is_long_double = 1; + break; + case L_('z'): + case L_('Z'): + /* ints are size_ts. */ + assert (sizeof (size_t) <= sizeof (unsigned long long int)); + spec->info.is_longlong = sizeof (size_t) > sizeof (unsigned long int); + spec->info.is_long = sizeof (size_t) > sizeof (unsigned int); + break; + case L_('t'): + assert (sizeof (ptrdiff_t) <= sizeof (long long int)); + spec->info.is_longlong = (sizeof (ptrdiff_t) > sizeof (long int)); + spec->info.is_long = sizeof (ptrdiff_t) > sizeof (int); + break; + case L_('j'): + assert (sizeof (uintmax_t) <= sizeof (unsigned long long int)); + spec->info.is_longlong = (sizeof (uintmax_t) + > sizeof (unsigned long int)); + spec->info.is_long = sizeof (uintmax_t) > sizeof (unsigned int); + break; + default: + /* Not a recognized modifier. Backup. */ + --format; + break; + } /* Get the format specification. */ spec->info.spec = (wchar_t) *format++; diff --git a/stdio-common/vfscanf.c b/stdio-common/vfscanf.c index ce5e5125f7..116b19b442 100644 --- a/stdio-common/vfscanf.c +++ b/stdio-common/vfscanf.c @@ -47,8 +47,6 @@ # define MALLOC 0x100 /* a: malloc strings */ # define CHAR 0x200 /* hh: char */ -# define TYPEMOD (LONG|LONGDBL|SHORT|CHAR) - #ifdef USE_IN_LIBIO # include @@ -408,84 +406,69 @@ __vfscanf (FILE *s, const char *format, va_list argptr) width = -1; /* Check for type modifiers. */ - while (*f == 'h' || *f == 'l' || *f == 'L' || *f == 'a' || *f == 'q' - || *f == 'z' || *f == 't' || *f == 'j') - switch (*f++) - { - case 'h': - /* int's are short int's. */ - if (flags & (LONG|LONGDBL|CHAR)) - /* Signal illegal format element. */ - conv_error (); - if (flags & SHORT) - { - flags &= ~SHORT; - flags |= CHAR; - } - else - flags |= SHORT; - break; - case 'l': - if (flags & (SHORT|LONGDBL|CHAR)) - conv_error (); - else if (flags & LONG) - { - /* A double `l' is equivalent to an `L'. */ - flags &= ~LONG; - flags |= LONGDBL; - } - else - /* int's are long int's. */ - flags |= LONG; - break; - case 'q': - case 'L': - /* double's are long double's, and int's are long long int's. */ - if (flags & TYPEMOD) - /* Signal illegal format element. */ - conv_error (); + switch (*f++) + { + case 'h': + /* ints are short ints or chars. */ + if (*f == 'h') + { + ++f; + flags |= CHAR; + } + else + flags |= SHORT; + break; + case 'l': + if (*f == 'l') + { + /* A double `l' is equivalent to an `L'. */ + ++f; + flags |= LONGDBL; + } + else + /* ints are long ints. */ + flags |= LONG; + break; + case 'q': + case 'L': + /* doubles are long doubles, and ints are long long ints. */ + flags |= LONGDBL; + break; + case 'a': + /* The `a' is used as a flag only if followed by `s', `S' or + `['. */ + if (*f != 's' && *f != 'S' && *f != '[') + { + --f; + break; + } + /* String conversions (%s, %[) take a `char **' + arg and fill it in with a malloc'd pointer. */ + flags |= MALLOC; + break; + case 'z': + if (sizeof (size_t) > sizeof (unsigned long int)) flags |= LONGDBL; - break; - case 'a': - /* The `a' is used as a flag only if followed by `s', `S' or - `['. */ - if (*f != 's' && *f != 'S' && *f != '[') - { - --f; - break; - } - if (flags & TYPEMOD) - /* Signal illegal format element. */ - conv_error (); - /* String conversions (%s, %[) take a `char **' - arg and fill it in with a malloc'd pointer. */ - flags |= MALLOC; - break; - case 'z': - if (flags & (SHORT|LONGDBL|CHAR)) - conv_error (); - if (sizeof (size_t) > sizeof (unsigned long int)) - flags |= LONGDBL; - else if (sizeof (size_t) > sizeof (unsigned int)) - flags |= LONG; - break; - case 'j': - if (flags & (SHORT|LONGDBL|CHAR)) - conv_error (); - if (sizeof (intmax_t) > sizeof (unsigned long int)) - flags |= LONGDBL; - else if (sizeof (intmax_t) > sizeof (unsigned int)) - flags |= LONG; - break; - case 't': - if (flags & (SHORT|LONGDBL|CHAR)) - conv_error (); - if (sizeof (ptrdiff_t) > sizeof (unsigned long int)) - flags |= LONGDBL; - else if (sizeof (ptrdiff_t) > sizeof (unsigned int)) - flags |= LONG; - break; - } + else if (sizeof (size_t) > sizeof (unsigned int)) + flags |= LONG; + break; + case 'j': + if (sizeof (uintmax_t) > sizeof (unsigned long int)) + flags |= LONGDBL; + else if (sizeof (uintmax_t) > sizeof (unsigned int)) + flags |= LONG; + break; + case 't': + if (sizeof (ptrdiff_t) > sizeof (long int)) + flags |= LONGDBL; + else if (sizeof (ptrdiff_t) > sizeof (int)) + flags |= LONG; + break; + default: + /* Not a recognized modifier. Backup. */ + --f; + break; + } /* End of the format string? */ if (*f == '\0') diff --git a/sunrpc/svc_unix.c b/sunrpc/svc_unix.c index df56d9bd5c..a8ed53463e 100644 --- a/sunrpc/svc_unix.c +++ b/sunrpc/svc_unix.c @@ -138,7 +138,7 @@ svcunix_create (int sock, u_int sendsize, u_int recvsize, char *path) } memset (&addr, '\0', sizeof (addr)); addr.sun_family = AF_UNIX; - len = strlen (addr.sun_path) + 1; + len = strlen (path) + 1; memcpy (addr.sun_path, path, len); len += sizeof (addr.sun_family); diff --git a/sunrpc/xcrypt.c b/sunrpc/xcrypt.c index d770a7d648..bee38ad8b5 100644 --- a/sunrpc/xcrypt.c +++ b/sunrpc/xcrypt.c @@ -143,7 +143,7 @@ passwd2des (char *pw, char *key) int i; memset (key, 0, 8); - for (i = 0; *pw; i = (i + 1) % 8) + for (i = 0; *pw && i < 8; ++i) key[i] ^= *pw++ << 1; des_setparity (key); diff --git a/sysdeps/generic/glob.c b/sysdeps/generic/glob.c index 7ab48995e2..bd92d68324 100644 --- a/sysdeps/generic/glob.c +++ b/sysdeps/generic/glob.c @@ -245,6 +245,7 @@ extern char *alloca (); #endif #ifdef _LIBC +# undef strdup # define strdup(str) __strdup (str) # define sysconf(id) __sysconf (id) # define closedir(dir) __closedir (dir) diff --git a/sysdeps/unix/sysv/linux/recvmsg.c b/sysdeps/unix/sysv/linux/recvmsg.c index 66970bcb89..52a0abcf67 100644 --- a/sysdeps/unix/sysv/linux/recvmsg.c +++ b/sysdeps/unix/sysv/linux/recvmsg.c @@ -39,53 +39,35 @@ __libc_recvmsg (int fd, struct msghdr *message, int flags) { struct cmsghdr *cm; int ret; - int found_creds = 0; - - /* Must check for space first. */ - cm = CMSG_FIRSTHDR (message); - while (cm) - { - if (cm->cmsg_type == SCM_CREDS) - { - if (cm->cmsg_len < CMSG_SPACE (sizeof (struct cmsgcred))) - { - __set_errno (EINVAL); - return -1; - } - found_creds = 1; - } - cm = CMSG_NXTHDR (message, cm); - } - ret = __syscall_recvmsg (fd, message, flags); if (ret == -1) return ret; - /* Postprocess the message control block for SCM_CREDS. */ + /* Postprocess the message control block for SCM_CREDS. */ cm = CMSG_FIRSTHDR (message); - if (found_creds) - while (cm) - { - if (cm->cmsg_type == SCM_CREDS) - { - struct cmsgcred *c = (struct cmsgcred *) CMSG_DATA (cm); - struct __kernel_ucred u; - int i; - memcpy (&u, CMSG_DATA (cm), sizeof (struct __kernel_ucred)); + while (cm) + { + if (cm->cmsg_type == SCM_CREDS) + { + struct cmsgcred *c = (struct cmsgcred *) CMSG_DATA (cm); + struct __kernel_ucred u; + int i; + memcpy (&u, CMSG_DATA (cm), sizeof (struct __kernel_ucred)); - c->cmcred_pid = u.pid; - c->cmcred_uid = u.uid; - c->cmcred_gid = u.gid; + c->cmcred_pid = u.pid; + c->cmcred_uid = u.uid; + c->cmcred_gid = u.gid; + + c->cmcred_euid = -1; + c->cmcred_ngroups = 0; + for (i = 0; i < CMGROUP_MAX; i++) + c->cmcred_groups[i] = -1; + } + cm = CMSG_NXTHDR (message, cm); + } - c->cmcred_euid = -1; - c->cmcred_ngroups = 0; - for (i = 0; i < CMGROUP_MAX; i++) - c->cmcred_groups[i] = -1; - } - cm = CMSG_NXTHDR (message, cm); - } return ret; } diff --git a/sysdeps/unix/sysv/linux/sigstack.c b/sysdeps/unix/sysv/linux/sigstack.c index cbae972048..eb95f20785 100644 --- a/sysdeps/unix/sysv/linux/sigstack.c +++ b/sysdeps/unix/sysv/linux/sigstack.c @@ -19,6 +19,7 @@ Boston, MA 02111-1307, USA. */ #include +#include #include