diff options
author | Andrew Hsieh <andrewhsieh@google.com> | 2014-03-22 18:02:10 +0800 |
---|---|---|
committer | Andrew Hsieh <andrewhsieh@google.com> | 2014-03-22 18:02:10 +0800 |
commit | b193073d2e5369d848d2135d5a2f642f3242cf0e (patch) | |
tree | d94f5455cc8f1c29348a5564b6b93f2612b9befa /9/platforms | |
parent | 25ac1196d47cea8ab0d26f6ca692034990f61233 (diff) | |
download | prebuilts_ndk-b193073d2e5369d848d2135d5a2f642f3242cf0e.zip prebuilts_ndk-b193073d2e5369d848d2135d5a2f642f3242cf0e.tar.gz prebuilts_ndk-b193073d2e5369d848d2135d5a2f642f3242cf0e.tar.bz2 |
Update 64-bit headers/libs
Change-Id: I8b1908261c49eafa97f3df174c18b09c1a3d9090
Diffstat (limited to '9/platforms')
177 files changed, 6216 insertions, 6185 deletions
diff --git a/9/platforms/android-19/arch-arm64/usr/include/arpa/nameser.h b/9/platforms/android-19/arch-arm64/usr/include/arpa/nameser.h index 028eadc..a87ac91 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/arpa/nameser.h +++ b/9/platforms/android-19/arch-arm64/usr/include/arpa/nameser.h @@ -1,41 +1,668 @@ +/* $NetBSD: nameser.h,v 1.25 2009/04/12 17:07:34 christos Exp $ */ + +/* + * Portions Copyright (C) 2004, 2005, 2008, 2009 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 1996-2003 Internet Software Consortium. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + /* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. + * Copyright (c) 1983, 1989, 1993 + * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * * Redistributions of source code must retain the above copyright + * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#ifndef _arpa_nameser_h -#define _arpa_nameser_h + +/* + * Id: nameser.h,v 1.16 2009/03/03 01:52:48 each Exp + */ + +#ifndef _ARPA_NAMESER_H_ +#define _ARPA_NAMESER_H_ + +#define BIND_4_COMPAT #include <sys/types.h> #include <sys/cdefs.h> -/* this header intentionally blank - * - * the definitions normally found in <arpa/nameser.h> are - * really a bunch of resolver's internal declarations that - * should not be exposed to client code in any way +/* + * Revision information. This is the release date in YYYYMMDD format. + * It can change every day so the right thing to do with it is use it + * in preprocessor commands such as "#if (__NAMESER > 19931104)". Do not + * compare for equality; rather, use it to determine whether your libbind.a + * contains a new enough lib/nameser/ to support the feature you need. + */ + +#define __NAMESER 20090302 /*%< New interface version stamp. */ + +/* + * Define constants based on RFC0883, RFC1034, RFC 1035 + */ +#define NS_PACKETSZ 512 /* default UDP packet size */ +#define NS_MAXDNAME 1025 /* maximum domain name (presentation format)*/ +#define NS_MAXMSG 65535 /* maximum message size */ +#define NS_MAXCDNAME 255 /* maximum compressed domain name */ +#define NS_MAXLABEL 63 /* maximum length of domain label */ +#define NS_MAXLABELS 128 /* theoretical max #/labels per domain name */ +#define NS_MAXNNAME 256 /* maximum uncompressed (binary) domain name*/ +#define NS_MAXPADDR (sizeof "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") +#define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */ +#define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */ +#define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */ +#define NS_INT32SZ 4 /* #/bytes of data in a uint32_t */ +#define NS_INT16SZ 2 /* #/bytes of data in a uint16_t */ +#define NS_INT8SZ 1 /* #/bytes of data in a uint8_t */ +#define NS_INADDRSZ 4 /* IPv4 T_A */ +#define NS_IN6ADDRSZ 16 /* IPv6 T_AAAA */ +#define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */ +#define NS_DEFAULTPORT 53 /* For both TCP and UDP. */ + +/* + * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord() + * in synch with it. + */ +typedef enum __ns_sect { + ns_s_qd = 0, /* Query: Question. */ + ns_s_zn = 0, /* Update: Zone. */ + ns_s_an = 1, /* Query: Answer. */ + ns_s_pr = 1, /* Update: Prerequisites. */ + ns_s_ns = 2, /* Query: Name servers. */ + ns_s_ud = 2, /* Update: Update. */ + ns_s_ar = 3, /* Query|Update: Additional records. */ + ns_s_max = 4 +} ns_sect; + +/* + * Network name (compressed or not) type. Equivilent to a pointer when used + * in a function prototype. Can be const'd. + */ +typedef u_char ns_nname[NS_MAXNNAME]; +typedef const u_char *ns_nname_ct; +typedef u_char *ns_nname_t; + +struct ns_namemap { ns_nname_ct base; int len; }; +typedef struct ns_namemap *ns_namemap_t; +typedef const struct ns_namemap *ns_namemap_ct; + +/* + * This is a message handle. It is caller allocated and has no dynamic data. + * This structure is intended to be opaque to all but ns_parse.c, thus the + * leading _'s on the member names. Use the accessor functions, not the _'s. + */ +typedef struct __ns_msg { + const u_char *_msg, *_eom; + uint16_t _id, _flags, _counts[ns_s_max]; + const u_char *_sections[ns_s_max]; + ns_sect _sect; + int _rrnum; + const u_char *_msg_ptr; +} ns_msg; +/* + * This is a newmsg handle, used when constructing new messages with + * ns_newmsg_init, et al. + */ +struct ns_newmsg { + ns_msg msg; + const u_char *dnptrs[25]; + const u_char **lastdnptr; +}; +typedef struct ns_newmsg ns_newmsg; + +/* Private data structure - do not use from outside library. */ +struct _ns_flagdata { int mask, shift; }; +extern const struct _ns_flagdata _ns_flagdata[]; + +/* Accessor macros - this is part of the public interface. */ + +#define ns_msg_id(handle) ((handle)._id + 0) +#define ns_msg_base(handle) ((handle)._msg + 0) +#define ns_msg_end(handle) ((handle)._eom + 0) +#define ns_msg_size(handle) ((size_t)((handle)._eom - (handle)._msg)) +#define ns_msg_count(handle, section) ((handle)._counts[section] + 0) + +/* + * This is a parsed record. It is caller allocated and has no dynamic data. + */ +typedef struct __ns_rr { + char name[NS_MAXDNAME]; + uint16_t type; + uint16_t rr_class; + uint32_t ttl; + uint16_t rdlength; + const u_char * rdata; +} ns_rr; + +/* + * Same thing, but using uncompressed network binary names, and real C types. + */ +typedef struct __ns_rr2 { + ns_nname nname; + size_t nnamel; + int type; + int rr_class; + u_int ttl; + int rdlength; + const u_char * rdata; +} ns_rr2; +/* Accessor macros - this is part of the public interface. */ +#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".") +#define ns_rr_nname(rr) ((const ns_nname_t)(rr).nname) +#define ns_rr_nnamel(rr) ((rr).nnamel + 0) +#define ns_rr_type(rr) ((ns_type)((rr).type + 0)) +#define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0)) +#define ns_rr_ttl(rr) ((u_long)(rr).ttl + 0) +#define ns_rr_rdlen(rr) ((size_t)(rr).rdlength + 0) +#define ns_rr_rdata(rr) ((rr).rdata + 0) + +/* + * These don't have to be in the same order as in the packet flags word, + * and they can even overlap in some cases, but they will need to be kept + * in synch with ns_parse.c:ns_flagdata[]. + */ +typedef enum __ns_flag { + ns_f_qr, /* Question/Response. */ + ns_f_opcode, /* Operation code. */ + ns_f_aa, /* Authoritative Answer. */ + ns_f_tc, /* Truncation occurred. */ + ns_f_rd, /* Recursion Desired. */ + ns_f_ra, /* Recursion Available. */ + ns_f_z, /* MBZ. */ + ns_f_ad, /* Authentic Data (DNSSEC). */ + ns_f_cd, /* Checking Disabled (DNSSEC). */ + ns_f_rcode, /* Response code. */ + ns_f_max +} ns_flag; + +/* + * Currently defined opcodes. */ +typedef enum __ns_opcode { + ns_o_query = 0, /* Standard query. */ + ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */ + ns_o_status = 2, /* Name server status query (unsupported). */ + /* Opcode 3 is undefined/reserved. */ + ns_o_notify = 4, /* Zone change notification. */ + ns_o_update = 5, /* Zone update message. */ + ns_o_max = 6 +} ns_opcode; + +/* + * Currently defined response codes. + */ +typedef enum __ns_rcode { + ns_r_noerror = 0, /* No error occurred. */ + ns_r_formerr = 1, /* Format error. */ + ns_r_servfail = 2, /* Server failure. */ + ns_r_nxdomain = 3, /* Name error. */ + ns_r_notimpl = 4, /* Unimplemented. */ + ns_r_refused = 5, /* Operation refused. */ + /* these are for BIND_UPDATE */ + ns_r_yxdomain = 6, /* Name exists */ + ns_r_yxrrset = 7, /* RRset exists */ + ns_r_nxrrset = 8, /* RRset does not exist */ + ns_r_notauth = 9, /* Not authoritative for zone */ + ns_r_notzone = 10, /* Zone of record different from zone section */ + ns_r_max = 11, + /* The following are EDNS extended rcodes */ + ns_r_badvers = 16, + /* The following are TSIG errors */ + ns_r_badsig = 16, + ns_r_badkey = 17, + ns_r_badtime = 18 +} ns_rcode; + +/* BIND_UPDATE */ +typedef enum __ns_update_operation { + ns_uop_delete = 0, + ns_uop_add = 1, + ns_uop_max = 2 +} ns_update_operation; + +/* + * This structure is used for TSIG authenticated messages + */ +struct ns_tsig_key { + char name[NS_MAXDNAME], alg[NS_MAXDNAME]; + unsigned char *data; + int len; +}; +typedef struct ns_tsig_key ns_tsig_key; + +/* + * This structure is used for TSIG authenticated TCP messages + */ +struct ns_tcp_tsig_state { + int counter; + struct dst_key *key; + void *ctx; + unsigned char sig[NS_PACKETSZ]; + int siglen; +}; +typedef struct ns_tcp_tsig_state ns_tcp_tsig_state; + +#define NS_TSIG_FUDGE 300 +#define NS_TSIG_TCP_COUNT 100 +#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT" + +#define NS_TSIG_ERROR_NO_TSIG -10 +#define NS_TSIG_ERROR_NO_SPACE -11 +#define NS_TSIG_ERROR_FORMERR -12 + +/* + * Currently defined type values for resources and queries. + */ +typedef enum __ns_type { + ns_t_invalid = 0, /* Cookie. */ + ns_t_a = 1, /* Host address. */ + ns_t_ns = 2, /* Authoritative server. */ + ns_t_md = 3, /* Mail destination. */ + ns_t_mf = 4, /* Mail forwarder. */ + ns_t_cname = 5, /* Canonical name. */ + ns_t_soa = 6, /* Start of authority zone. */ + ns_t_mb = 7, /* Mailbox domain name. */ + ns_t_mg = 8, /* Mail group member. */ + ns_t_mr = 9, /* Mail rename name. */ + ns_t_null = 10, /* Null resource record. */ + ns_t_wks = 11, /* Well known service. */ + ns_t_ptr = 12, /* Domain name pointer. */ + ns_t_hinfo = 13, /* Host information. */ + ns_t_minfo = 14, /* Mailbox information. */ + ns_t_mx = 15, /* Mail routing information. */ + ns_t_txt = 16, /* Text strings. */ + ns_t_rp = 17, /* Responsible person. */ + ns_t_afsdb = 18, /* AFS cell database. */ + ns_t_x25 = 19, /* X_25 calling address. */ + ns_t_isdn = 20, /* ISDN calling address. */ + ns_t_rt = 21, /* Router. */ + ns_t_nsap = 22, /* NSAP address. */ + ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */ + ns_t_sig = 24, /* Security signature. */ + ns_t_key = 25, /* Security key. */ + ns_t_px = 26, /* X.400 mail mapping. */ + ns_t_gpos = 27, /* Geographical position (withdrawn). */ + ns_t_aaaa = 28, /* IPv6 Address. */ + ns_t_loc = 29, /* Location Information. */ + ns_t_nxt = 30, /* Next domain (security). */ + ns_t_eid = 31, /* Endpoint identifier. */ + ns_t_nimloc = 32, /* Nimrod Locator. */ + ns_t_srv = 33, /* Server Selection. */ + ns_t_atma = 34, /* ATM Address */ + ns_t_naptr = 35, /* Naming Authority PoinTeR */ + ns_t_kx = 36, /* Key Exchange */ + ns_t_cert = 37, /* Certification record */ + ns_t_a6 = 38, /* IPv6 address (experimental) */ + ns_t_dname = 39, /* Non-terminal DNAME */ + ns_t_sink = 40, /* Kitchen sink (experimentatl) */ + ns_t_opt = 41, /* EDNS0 option (meta-RR) */ + ns_t_apl = 42, /* Address prefix list (RFC 3123) */ + ns_t_ds = 43, /* Delegation Signer */ + ns_t_sshfp = 44, /* SSH Fingerprint */ + ns_t_ipseckey = 45, /* IPSEC Key */ + ns_t_rrsig = 46, /* RRset Signature */ + ns_t_nsec = 47, /* Negative security */ + ns_t_dnskey = 48, /* DNS Key */ + ns_t_dhcid = 49, /* Dynamic host configuratin identifier */ + ns_t_nsec3 = 50, /* Negative security type 3 */ + ns_t_nsec3param = 51, /* Negative security type 3 parameters */ + ns_t_hip = 55, /* Host Identity Protocol */ + ns_t_spf = 99, /* Sender Policy Framework */ + ns_t_tkey = 249, /* Transaction key */ + ns_t_tsig = 250, /* Transaction signature. */ + ns_t_ixfr = 251, /* Incremental zone transfer. */ + ns_t_axfr = 252, /* Transfer zone of authority. */ + ns_t_mailb = 253, /* Transfer mailbox records. */ + ns_t_maila = 254, /* Transfer mail agent records. */ + ns_t_any = 255, /* Wildcard match. */ + ns_t_zxfr = 256, /* BIND-specific, nonstandard. */ + ns_t_dlv = 32769, /* DNSSEC look-aside validatation. */ + ns_t_max = 65536 +} ns_type; + +/* Exclusively a QTYPE? (not also an RTYPE) */ +#define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \ + (t) == ns_t_mailb || (t) == ns_t_maila) +/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */ +#define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt) +/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */ +#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t)) +#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr) +#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \ + (t) == ns_t_zxfr) + +/* + * Values for class field + */ +typedef enum __ns_class { + ns_c_invalid = 0, /* Cookie. */ + ns_c_in = 1, /* Internet. */ + ns_c_2 = 2, /* unallocated/unsupported. */ + ns_c_chaos = 3, /* MIT Chaos-net. */ + ns_c_hs = 4, /* MIT Hesiod. */ + /* Query class values which do not appear in resource records */ + ns_c_none = 254, /* for prereq. sections in update requests */ + ns_c_any = 255, /* Wildcard match. */ + ns_c_max = 65536 +} ns_class; + +/* DNSSEC constants. */ + +typedef enum __ns_key_types { + ns_kt_rsa = 1, /* key type RSA/MD5 */ + ns_kt_dh = 2, /* Diffie Hellman */ + ns_kt_dsa = 3, /* Digital Signature Standard (MANDATORY) */ + ns_kt_private = 254 /* Private key type starts with OID */ +} ns_key_types; + +typedef enum __ns_cert_types { + cert_t_pkix = 1, /* PKIX (X.509v3) */ + cert_t_spki = 2, /* SPKI */ + cert_t_pgp = 3, /* PGP */ + cert_t_url = 253, /* URL private type */ + cert_t_oid = 254 /* OID private type */ +} ns_cert_types; + +/* Flags field of the KEY RR rdata. */ +#define NS_KEY_TYPEMASK 0xC000 /* Mask for "type" bits */ +#define NS_KEY_TYPE_AUTH_CONF 0x0000 /* Key usable for both */ +#define NS_KEY_TYPE_CONF_ONLY 0x8000 /* Key usable for confidentiality */ +#define NS_KEY_TYPE_AUTH_ONLY 0x4000 /* Key usable for authentication */ +#define NS_KEY_TYPE_NO_KEY 0xC000 /* No key usable for either; no key */ +/* The type bits can also be interpreted independently, as single bits: */ +#define NS_KEY_NO_AUTH 0x8000 /* Key unusable for authentication */ +#define NS_KEY_NO_CONF 0x4000 /* Key unusable for confidentiality */ +#define NS_KEY_RESERVED2 0x2000 /* Security is *mandatory* if bit=0 */ +#define NS_KEY_EXTENDED_FLAGS 0x1000 /* reserved - must be zero */ +#define NS_KEY_RESERVED4 0x0800 /* reserved - must be zero */ +#define NS_KEY_RESERVED5 0x0400 /* reserved - must be zero */ +#define NS_KEY_NAME_TYPE 0x0300 /* these bits determine the type */ +#define NS_KEY_NAME_USER 0x0000 /* key is assoc. with user */ +#define NS_KEY_NAME_ENTITY 0x0200 /* key is assoc. with entity eg host */ +#define NS_KEY_NAME_ZONE 0x0100 /* key is zone key */ +#define NS_KEY_NAME_RESERVED 0x0300 /* reserved meaning */ +#define NS_KEY_RESERVED8 0x0080 /* reserved - must be zero */ +#define NS_KEY_RESERVED9 0x0040 /* reserved - must be zero */ +#define NS_KEY_RESERVED10 0x0020 /* reserved - must be zero */ +#define NS_KEY_RESERVED11 0x0010 /* reserved - must be zero */ +#define NS_KEY_SIGNATORYMASK 0x000F /* key can sign RR's of same name */ +#define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \ + NS_KEY_RESERVED4 | \ + NS_KEY_RESERVED5 | \ + NS_KEY_RESERVED8 | \ + NS_KEY_RESERVED9 | \ + NS_KEY_RESERVED10 | \ + NS_KEY_RESERVED11 ) +#define NS_KEY_RESERVED_BITMASK2 0xFFFF /* no bits defined here */ + +/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */ +#define NS_ALG_MD5RSA 1 /* MD5 with RSA */ +#define NS_ALG_DH 2 /* Diffie Hellman KEY */ +#define NS_ALG_DSA 3 /* DSA KEY */ +#define NS_ALG_DSS NS_ALG_DSA +#define NS_ALG_EXPIRE_ONLY 253 /* No alg, no security */ +#define NS_ALG_PRIVATE_OID 254 /* Key begins with OID giving alg */ + +/* Protocol values */ +/* value 0 is reserved */ +#define NS_KEY_PROT_TLS 1 +#define NS_KEY_PROT_EMAIL 2 +#define NS_KEY_PROT_DNSSEC 3 +#define NS_KEY_PROT_IPSEC 4 +#define NS_KEY_PROT_ANY 255 + +/* Signatures */ +#define NS_MD5RSA_MIN_BITS 512 /* Size of a mod or exp in bits */ +#define NS_MD5RSA_MAX_BITS 4096 + /* Total of binary mod and exp */ +#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3) + /* Max length of text sig block */ +#define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4) +#define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8) +#define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8) + +#define NS_DSA_SIG_SIZE 41 +#define NS_DSA_MIN_SIZE 213 +#define NS_DSA_MAX_BYTES 405 + +/* Offsets into SIG record rdata to find various values */ +#define NS_SIG_TYPE 0 /* Type flags */ +#define NS_SIG_ALG 2 /* Algorithm */ +#define NS_SIG_LABELS 3 /* How many labels in name */ +#define NS_SIG_OTTL 4 /* Original TTL */ +#define NS_SIG_EXPIR 8 /* Expiration time */ +#define NS_SIG_SIGNED 12 /* Signature time */ +#define NS_SIG_FOOT 16 /* Key footprint */ +#define NS_SIG_SIGNER 18 /* Domain name of who signed it */ + +/* How RR types are represented as bit-flags in NXT records */ +#define NS_NXT_BITS 8 +#define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_MAX 127 + +/* + * EDNS0 extended flags and option codes, host order. + */ +#define NS_OPT_DNSSEC_OK 0x8000U +#define NS_OPT_NSID 3 + +/* + * Inline versions of get/put short/long. Pointer is advanced. + */ +#define NS_GET16(s, cp) do { \ + const u_char *t_cp = (const u_char *)(cp); \ + (s) = ((uint16_t)t_cp[0] << 8) \ + | ((uint16_t)t_cp[1]) \ + ; \ + (cp) += NS_INT16SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_GET32(l, cp) do { \ + const u_char *t_cp = (const u_char *)(cp); \ + (l) = ((uint32_t)t_cp[0] << 24) \ + | ((uint32_t)t_cp[1] << 16) \ + | ((uint32_t)t_cp[2] << 8) \ + | ((uint32_t)t_cp[3]) \ + ; \ + (cp) += NS_INT32SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_PUT16(s, cp) do { \ + uint32_t t_s = (uint32_t)(s); \ + u_char *t_cp = (u_char *)(cp); \ + *t_cp++ = t_s >> 8; \ + *t_cp = t_s; \ + (cp) += NS_INT16SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_PUT32(l, cp) do { \ + uint32_t t_l = (uint32_t)(l); \ + u_char *t_cp = (u_char *)(cp); \ + *t_cp++ = t_l >> 24; \ + *t_cp++ = t_l >> 16; \ + *t_cp++ = t_l >> 8; \ + *t_cp = t_l; \ + (cp) += NS_INT32SZ; \ +} while (/*CONSTCOND*/0) + +/* + * ANSI C identifier hiding for bind's lib/nameser. + */ +#define ns_msg_getflag __ns_msg_getflag +#define ns_get16 __ns_get16 +#define ns_get32 __ns_get32 +#define ns_put16 __ns_put16 +#define ns_put32 __ns_put32 +#define ns_initparse __ns_initparse +#define ns_skiprr __ns_skiprr +#define ns_parserr __ns_parserr +#define ns_parserr2 __ns_parserr2 +#define ns_sprintrr __ns_sprintrr +#define ns_sprintrrf __ns_sprintrrf +#define ns_format_ttl __ns_format_ttl +#define ns_parse_ttl __ns_parse_ttl +#define ns_datetosecs __ns_datetosecs +#define ns_name_ntol __ns_name_ntol +#define ns_name_ntop __ns_name_ntop +#define ns_name_pton __ns_name_pton +#define ns_name_pton2 __ns_name_pton2 +#define ns_name_unpack __ns_name_unpack +#define ns_name_unpack2 __ns_name_unpack2 +#define ns_name_pack __ns_name_pack +#define ns_name_compress __ns_name_compress +#define ns_name_uncompress __ns_name_uncompress +#define ns_name_skip __ns_name_skip +#define ns_name_rollback __ns_name_rollback +#define ns_name_length __ns_name_length +#define ns_name_eq __ns_name_eq +#define ns_name_owned __ns_name_owned +#define ns_name_map __ns_name_map +#define ns_name_labels __ns_name_labels +#define ns_sign __ns_sign +#define ns_sign2 __ns_sign2 +#define ns_sign_tcp __ns_sign_tcp +#define ns_sign_tcp2 __ns_sign_tcp2 +#define ns_sign_tcp_init __ns_sign_tcp_init +#define ns_find_tsig __ns_find_tsig +#define ns_verify __ns_verify +#define ns_verify_tcp __ns_verify_tcp +#define ns_verify_tcp_init __ns_verify_tcp_init +#define ns_samedomain __ns_samedomain +#define ns_subdomain __ns_subdomain +#define ns_makecanon __ns_makecanon +#define ns_samename __ns_samename +#define ns_newmsg_init __ns_newmsg_init +#define ns_newmsg_copy __ns_newmsg_copy +#define ns_newmsg_id __ns_newmsg_id +#define ns_newmsg_flag __ns_newmsg_flag +#define ns_newmsg_q __ns_newmsg_q +#define ns_newmsg_rr __ns_newmsg_rr +#define ns_newmsg_done __ns_newmsg_done +#define ns_rdata_unpack __ns_rdata_unpack +#define ns_rdata_equal __ns_rdata_equal +#define ns_rdata_refers __ns_rdata_refers + +__BEGIN_DECLS +int ns_msg_getflag(ns_msg, int); +uint16_t ns_get16(const u_char *); +uint32_t ns_get32(const u_char *); +void ns_put16(uint16_t, u_char *); +void ns_put32(uint32_t, u_char *); +int ns_initparse(const u_char *, int, ns_msg *); +int ns_skiprr(const u_char *, const u_char *, ns_sect, int); +int ns_parserr(ns_msg *, ns_sect, int, ns_rr *); +int ns_parserr2(ns_msg *, ns_sect, int, ns_rr2 *); +int ns_sprintrr(const ns_msg *, const ns_rr *, + const char *, const char *, char *, size_t); +int ns_sprintrrf(const u_char *, size_t, const char *, + ns_class, ns_type, u_long, const u_char *, + size_t, const char *, const char *, + char *, size_t); +int ns_format_ttl(u_long, char *, size_t); +int ns_parse_ttl(const char *, u_long *); +uint32_t ns_datetosecs(const char *cp, int *errp); +int ns_name_ntol(const u_char *, u_char *, size_t); +int ns_name_ntop(const u_char *, char *, size_t); +int ns_name_pton(const char *, u_char *, size_t); +int ns_name_pton2(const char *, u_char *, size_t, size_t *); +int ns_name_unpack(const u_char *, const u_char *, + const u_char *, u_char *, size_t); +int ns_name_unpack2(const u_char *, const u_char *, + const u_char *, u_char *, size_t, + size_t *); +int ns_name_pack(const u_char *, u_char *, int, + const u_char **, const u_char **); +int ns_name_uncompress(const u_char *, const u_char *, + const u_char *, char *, size_t); +int ns_name_compress(const char *, u_char *, size_t, + const u_char **, const u_char **); +int ns_name_skip(const u_char **, const u_char *); +void ns_name_rollback(const u_char *, const u_char **, + const u_char **); +int ns_sign(u_char *, int *, int, int, void *, + const u_char *, int, u_char *, int *, time_t); +int ns_sign2(u_char *, int *, int, int, void *, + const u_char *, int, u_char *, int *, time_t, + u_char **, u_char **); +ssize_t ns_name_length(ns_nname_ct, size_t); +int ns_name_eq(ns_nname_ct, size_t, ns_nname_ct, size_t); +int ns_name_owned(ns_namemap_ct, int, ns_namemap_ct, int); +int ns_name_map(ns_nname_ct, size_t, ns_namemap_t, int); +int ns_name_labels(ns_nname_ct, size_t); +int ns_sign_tcp(u_char *, int *, int, int, + ns_tcp_tsig_state *, int); +int ns_sign_tcp2(u_char *, int *, int, int, + ns_tcp_tsig_state *, int, + u_char **, u_char **); +int ns_sign_tcp_init(void *, const u_char *, int, + ns_tcp_tsig_state *); +u_char *ns_find_tsig(u_char *, u_char *); +int ns_verify(u_char *, int *, void *, + const u_char *, int, u_char *, int *, + time_t *, int); +int ns_verify_tcp(u_char *, int *, ns_tcp_tsig_state *, int); +int ns_verify_tcp_init(void *, const u_char *, int, + ns_tcp_tsig_state *); +int ns_samedomain(const char *, const char *); +int ns_subdomain(const char *, const char *); +int ns_makecanon(const char *, char *, size_t); +int ns_samename(const char *, const char *); +int ns_newmsg_init(u_char *buffer, size_t bufsiz, ns_newmsg *); +int ns_newmsg_copy(ns_newmsg *, ns_msg *); +void ns_newmsg_id(ns_newmsg *handle, uint16_t id); +void ns_newmsg_flag(ns_newmsg *handle, ns_flag flag, u_int value); +int ns_newmsg_q(ns_newmsg *handle, ns_nname_ct qname, + ns_type qtype, ns_class qclass); +int ns_newmsg_rr(ns_newmsg *handle, ns_sect sect, + ns_nname_ct name, ns_type type, + ns_class rr_class, uint32_t ttl, + uint16_t rdlen, const u_char *rdata); +size_t ns_newmsg_done(ns_newmsg *handle); +ssize_t ns_rdata_unpack(const u_char *, const u_char *, ns_type, + const u_char *, size_t, u_char *, size_t); +int ns_rdata_equal(ns_type, + const u_char *, size_t, + const u_char *, size_t); +int ns_rdata_refers(ns_type, + const u_char *, size_t, + const u_char *); +__END_DECLS + +#ifdef BIND_4_COMPAT +#include <arpa/nameser_compat.h> +#endif -#endif /* _arpa_nameser_h */ +#endif /* !_ARPA_NAMESER_H_ */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/arpa/nameser_compat.h b/9/platforms/android-19/arch-arm64/usr/include/arpa/nameser_compat.h new file mode 100644 index 0000000..e060f60 --- /dev/null +++ b/9/platforms/android-19/arch-arm64/usr/include/arpa/nameser_compat.h @@ -0,0 +1,238 @@ +/* $NetBSD: nameser_compat.h,v 1.1.1.2 2004/11/07 01:28:27 christos Exp $ */ + +/* Copyright (c) 1983, 1989 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * from nameser.h 8.1 (Berkeley) 6/2/93 + * Id: nameser_compat.h,v 1.8 2006/05/19 02:33:40 marka Exp + */ + +#ifndef _ARPA_NAMESER_COMPAT_ +#define _ARPA_NAMESER_COMPAT_ + +#define __BIND 19950621 /* (DEAD) interface version stamp. */ + +#include <endian.h> + +#ifndef BYTE_ORDER +#if (BSD >= 199103) +# include <machine/endian.h> +#else +#ifdef __linux__ +# include <endian.h> +#else +#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */ +#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ +#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp)*/ + +#if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \ + defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \ + defined(__i386__) || defined(__i386) || defined(__amd64__) || \ + defined(__x86_64__) || defined(MIPSEL) || defined(_MIPSEL) || \ + defined(BIT_ZERO_ON_RIGHT) || defined(__alpha__) || defined(__alpha) || \ + (defined(__Lynx__) && defined(__x86__)) +#define BYTE_ORDER LITTLE_ENDIAN +#endif + +#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \ + defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \ + defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\ + defined(apollo) || defined(__convex__) || defined(_CRAY) || \ + defined(__hppa) || defined(__hp9000) || \ + defined(__hp9000s300) || defined(__hp9000s700) || \ + defined(__hp3000s900) || defined(__hpux) || defined(MPE) || \ + defined (BIT_ZERO_ON_LEFT) || defined(m68k) || defined(__sparc) || \ + (defined(__Lynx__) && \ + (defined(__68k__) || defined(__sparc__) || defined(__powerpc__))) +#define BYTE_ORDER BIG_ENDIAN +#endif +#endif /* __linux */ +#endif /* BSD */ +#endif /* BYTE_ORDER */ + +#if !defined(BYTE_ORDER) || \ + (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \ + BYTE_ORDER != PDP_ENDIAN) + /* you must determine what the correct bit order is for + * your compiler - the next line is an intentional error + * which will force your compiles to bomb until you fix + * the above macros. + */ + #error "Undefined or invalid BYTE_ORDER"; +#endif + +/* + * Structure for query header. The order of the fields is machine- and + * compiler-dependent, depending on the byte/bit order and the layout + * of bit fields. We use bit fields only in int variables, as this + * is all ANSI requires. This requires a somewhat confusing rearrangement. + */ + +typedef struct { + unsigned id :16; /* query identification number */ +#if BYTE_ORDER == BIG_ENDIAN + /* fields in third byte */ + unsigned qr: 1; /* response flag */ + unsigned opcode: 4; /* purpose of message */ + unsigned aa: 1; /* authoritive answer */ + unsigned tc: 1; /* truncated message */ + unsigned rd: 1; /* recursion desired */ + /* fields in fourth byte */ + unsigned ra: 1; /* recursion available */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ad: 1; /* authentic data from named */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned rcode :4; /* response code */ +#endif +#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN + /* fields in third byte */ + unsigned rd :1; /* recursion desired */ + unsigned tc :1; /* truncated message */ + unsigned aa :1; /* authoritive answer */ + unsigned opcode :4; /* purpose of message */ + unsigned qr :1; /* response flag */ + /* fields in fourth byte */ + unsigned rcode :4; /* response code */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned ad: 1; /* authentic data from named */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ra :1; /* recursion available */ +#endif + /* remaining bytes */ + unsigned qdcount :16; /* number of question entries */ + unsigned ancount :16; /* number of answer entries */ + unsigned nscount :16; /* number of authority entries */ + unsigned arcount :16; /* number of resource entries */ +} HEADER; + +#define PACKETSZ NS_PACKETSZ +#define MAXDNAME NS_MAXDNAME +#define MAXCDNAME NS_MAXCDNAME +#define MAXLABEL NS_MAXLABEL +#define HFIXEDSZ NS_HFIXEDSZ +#define QFIXEDSZ NS_QFIXEDSZ +#define RRFIXEDSZ NS_RRFIXEDSZ +#define INT32SZ NS_INT32SZ +#define INT16SZ NS_INT16SZ +#define INT8SZ NS_INT8SZ +#define INADDRSZ NS_INADDRSZ +#define IN6ADDRSZ NS_IN6ADDRSZ +#define INDIR_MASK NS_CMPRSFLGS +#define NAMESERVER_PORT NS_DEFAULTPORT + +#define S_ZONE ns_s_zn +#define S_PREREQ ns_s_pr +#define S_UPDATE ns_s_ud +#define S_ADDT ns_s_ar + +#define QUERY ns_o_query +#define IQUERY ns_o_iquery +#define STATUS ns_o_status +#define NS_NOTIFY_OP ns_o_notify +#define NS_UPDATE_OP ns_o_update + +#define NOERROR ns_r_noerror +#define FORMERR ns_r_formerr +#define SERVFAIL ns_r_servfail +#define NXDOMAIN ns_r_nxdomain +#define NOTIMP ns_r_notimpl +#define REFUSED ns_r_refused +#define YXDOMAIN ns_r_yxdomain +#define YXRRSET ns_r_yxrrset +#define NXRRSET ns_r_nxrrset +#define NOTAUTH ns_r_notauth +#define NOTZONE ns_r_notzone +/*#define BADSIG ns_r_badsig*/ +/*#define BADKEY ns_r_badkey*/ +/*#define BADTIME ns_r_badtime*/ + + +#define DELETE ns_uop_delete +#define ADD ns_uop_add + +#define T_A ns_t_a +#define T_NS ns_t_ns +#define T_MD ns_t_md +#define T_MF ns_t_mf +#define T_CNAME ns_t_cname +#define T_SOA ns_t_soa +#define T_MB ns_t_mb +#define T_MG ns_t_mg +#define T_MR ns_t_mr +#define T_NULL ns_t_null +#define T_WKS ns_t_wks +#define T_PTR ns_t_ptr +#define T_HINFO ns_t_hinfo +#define T_MINFO ns_t_minfo +#define T_MX ns_t_mx +#define T_TXT ns_t_txt +#define T_RP ns_t_rp +#define T_AFSDB ns_t_afsdb +#define T_X25 ns_t_x25 +#define T_ISDN ns_t_isdn +#define T_RT ns_t_rt +#define T_NSAP ns_t_nsap +#define T_NSAP_PTR ns_t_nsap_ptr +#define T_SIG ns_t_sig +#define T_KEY ns_t_key +#define T_PX ns_t_px +#define T_GPOS ns_t_gpos +#define T_AAAA ns_t_aaaa +#define T_LOC ns_t_loc +#define T_NXT ns_t_nxt +#define T_EID ns_t_eid +#define T_NIMLOC ns_t_nimloc +#define T_SRV ns_t_srv +#define T_ATMA ns_t_atma +#define T_NAPTR ns_t_naptr +#define T_A6 ns_t_a6 +#define T_TSIG ns_t_tsig +#define T_IXFR ns_t_ixfr +#define T_AXFR ns_t_axfr +#define T_MAILB ns_t_mailb +#define T_MAILA ns_t_maila +#define T_ANY ns_t_any + +#define C_IN ns_c_in +#define C_CHAOS ns_c_chaos +#define C_HS ns_c_hs +/* BIND_UPDATE */ +#define C_NONE ns_c_none +#define C_ANY ns_c_any + +#define GETSHORT NS_GET16 +#define GETLONG NS_GET32 +#define PUTSHORT NS_PUT16 +#define PUTLONG NS_PUT32 + +#endif /* _ARPA_NAMESER_COMPAT_ */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/asm-generic/signal.h b/9/platforms/android-19/arch-arm64/usr/include/asm-generic/signal.h index c4c7e00..fe7d9a0 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/asm-generic/signal.h +++ b/9/platforms/android-19/arch-arm64/usr/include/asm-generic/signal.h @@ -19,10 +19,10 @@ #ifndef _UAPI__ASM_GENERIC_SIGNAL_H #define _UAPI__ASM_GENERIC_SIGNAL_H #include <linux/types.h> -#define _NSIG 64 +#define _KERNEL__NSIG 64 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define _NSIG_BPW __BITS_PER_LONG -#define _NSIG_WORDS (_NSIG / _NSIG_BPW) +#define _NSIG_WORDS (_KERNEL__NSIG / _NSIG_BPW) #define SIGHUP 1 #define SIGINT 2 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ @@ -68,7 +68,7 @@ /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define SIGRTMIN 32 #ifndef SIGRTMAX -#define SIGRTMAX _NSIG +#define SIGRTMAX _KERNEL__NSIG #endif /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define SA_NOCLDSTOP 0x00000001 diff --git a/9/platforms/android-19/arch-arm64/usr/include/dirent.h b/9/platforms/android-19/arch-arm64/usr/include/dirent.h index 129cdfa..bfe4ea4 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/dirent.h +++ b/9/platforms/android-19/arch-arm64/usr/include/dirent.h @@ -46,27 +46,33 @@ __BEGIN_DECLS #define DT_WHT 14 #endif -struct dirent { - uint64_t d_ino; - int64_t d_off; - unsigned short d_reclen; - unsigned char d_type; - char d_name[256]; -}; +#define __DIRENT64_BODY \ + uint64_t d_ino; \ + int64_t d_off; \ + unsigned short d_reclen; \ + unsigned char d_type; \ + char d_name[256]; \ + +struct dirent { __DIRENT64_BODY }; +struct dirent64 { __DIRENT64_BODY }; + #define d_fileno d_ino -#define dirent64 dirent typedef struct DIR DIR; extern DIR* opendir(const char*); extern DIR* fdopendir(int); extern struct dirent* readdir(DIR*); +extern struct dirent64* readdir64(DIR*); extern int readdir_r(DIR*, struct dirent*, struct dirent**); +extern int readdir64_r(DIR*, struct dirent64*, struct dirent64**); extern int closedir(DIR*); extern void rewinddir(DIR*); extern int dirfd(DIR*); extern int alphasort(const struct dirent**, const struct dirent**); +extern int alphasort64(const struct dirent64**, const struct dirent64**); extern int scandir(const char*, struct dirent***, int (*)(const struct dirent*), int (*)(const struct dirent**, const struct dirent**)); +extern int scandir64(const char*, struct dirent64***, int (*)(const struct dirent64*), int (*)(const struct dirent64**, const struct dirent64**)); extern int getdents(unsigned int, struct dirent*, unsigned int); __END_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/elf.h b/9/platforms/android-19/arch-arm64/usr/include/elf.h index 3f2e4f2..7a217b0 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/elf.h +++ b/9/platforms/android-19/arch-arm64/usr/include/elf.h @@ -28,33 +28,58 @@ #ifndef _ELF_H #define _ELF_H -#include <stdint.h> #include <linux/auxvec.h> +#include <linux/elf.h> +#include <linux/elf-em.h> -/* TODO: can we switch to <linux/elf.h> instead? http://b/12476126. */ -#include <sys/exec_elf.h> +#include <machine/elf_machdep.h> typedef struct { - uint32_t a_type; + __u32 a_type; union { - uint32_t a_val; + __u32 a_val; } a_un; } Elf32_auxv_t; typedef struct { - uint64_t a_type; + __u64 a_type; union { - uint64_t a_val; + __u64 a_val; } a_un; } Elf64_auxv_t; -#ifdef __LP64__ -# define Elf_auxv_t Elf64_auxv_t -#else -# define Elf_auxv_t Elf32_auxv_t -#endif +#define DF_ORIGIN 0x00000001 +#define DF_SYMBOLIC 0x00000002 +#define DF_TEXTREL 0x00000004 +#define DF_BIND_NOW 0x00000008 +#define DF_STATIC_TLS 0x00000010 -/* <sys/exec_elf.h> doesn't contain any NT_ constants. aarch64 strace needs this one. */ -#define NT_PRSTATUS 1 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +/* glibc and BSD disagree for DT_ENCODING; glibc looks wrong. */ +#define DT_PREINIT_ARRAY 32 +#define DT_PREINIT_ARRAYSZ 33 + +#define ELFOSABI_SYSV 0 /* Synonym for ELFOSABI_NONE used by valgrind. */ + +#define EM_ARM 40 +#define EM_AARCH64 183 + +#define PT_GNU_RELRO 0x6474e552 + +#define STB_LOOS 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +#define STT_LOOS 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 #endif /* _ELF_H */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/fcntl.h b/9/platforms/android-19/arch-arm64/usr/include/fcntl.h index b7b91f2..779a089 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/fcntl.h +++ b/9/platforms/android-19/arch-arm64/usr/include/fcntl.h @@ -41,12 +41,19 @@ __BEGIN_DECLS #define O_ASYNC FASYNC #endif +#define SYNC_FILE_RANGE_WAIT_BEFORE 1 +#define SYNC_FILE_RANGE_WRITE 2 +#define SYNC_FILE_RANGE_WAIT_AFTER 4 + extern int creat(const char*, mode_t); +extern int creat64(const char*, mode_t); extern int fallocate64(int, int, off64_t, off64_t); extern int fallocate(int, int, off_t, off_t); extern int fcntl(int, int, ...); extern int openat(int, const char*, int, ...); +extern int openat64(int, const char*, int, ...); extern int open(const char*, int, ...); +extern int open64(const char*, int, ...); extern int posix_fallocate64(int, off64_t, off64_t); extern int posix_fallocate(int, off_t, off_t); extern int unlinkat(int, const char*, int); diff --git a/9/platforms/android-19/arch-arm64/usr/include/fenv.h b/9/platforms/android-19/arch-arm64/usr/include/fenv.h index 32c3b1d..6966e0d 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/fenv.h +++ b/9/platforms/android-19/arch-arm64/usr/include/fenv.h @@ -1,5 +1,8 @@ -/*- - * Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG> +/* $OpenBSD: fenv.h,v 1.2 2011/05/25 21:46:49 martynas Exp $ */ +/* $NetBSD: fenv.h,v 1.2.4.1 2011/02/08 16:18:55 bouyer Exp $ */ + +/* + * Copyright (c) 2010 The NetBSD Foundation, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -11,222 +14,56 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD: src/lib/msun/arm/fenv.h,v 1.5 2005/03/16 19:03:45 das Exp $ - */ - -/* - * Rewritten for Android. - * - * The ARM FPSCR (Floating-point Status and Control Register) described here: - * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344b/Chdfafia.html - * has been split into the FPCR (Floating-point Control Register) and FPSR - * (Floating-point Status Register) on the ARMv8. These are described briefly in - * "Procedure Call Standard for the ARM 64-bit Architecture" - * http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055a/IHI0055A_aapcs64.pdf - * section 5.1.2 SIMD and Floating-Point Registers + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FENV_H_ #define _FENV_H_ -#include <sys/types.h> +#include <sys/cdefs.h> +#include <machine/fenv.h> __BEGIN_DECLS -typedef __uint32_t fenv_t; -typedef __uint32_t fexcept_t; +int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int feraiseexcept(int); +int fesetexceptflag(const fexcept_t *, int); +int fetestexcept(int); -/* Exception flags. */ -#define FE_INVALID 0x01 -#define FE_DIVBYZERO 0x02 -#define FE_OVERFLOW 0x04 -#define FE_UNDERFLOW 0x08 -#define FE_INEXACT 0x10 -#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW) -#define _FPSCR_ENABLE_SHIFT 8 -#define _FPSCR_ENABLE_MASK (FE_ALL_EXCEPT << _FPSCR_ENABLE_SHIFT) +int fegetround(void); +int fesetround(int); -/* Rounding modes. */ -#define FE_TONEAREST 0x0 -#define FE_UPWARD 0x1 -#define FE_DOWNWARD 0x2 -#define FE_TOWARDZERO 0x3 -#define _FPSCR_RMODE_SHIFT 22 +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); -#define FPCR_IOE (1 << 8) -#define FPCR_DZE (1 << 9) -#define FPCR_OFE (1 << 10) -#define FPCR_UFE (1 << 11) -#define FPCR_IXE (1 << 12) -#define FPCR_IDE (1 << 15) -#define FPCR_LEN (7 << 16) -#define FPCR_STRIDE (3 << 20) -#define FPCR_RMODE (3 << 22) -#define FPCR_FZ (1 << 24) -#define FPCR_DN (1 << 25) -#define FPCR_AHP (1 << 26) -#define FPCR_MASK (FPCR_IOE | \ - FPCR_DZE | \ - FPCR_OFE | \ - FPCR_UFE | \ - FPCR_IXE | \ - FPCR_IDE | \ - FPCR_LEN | \ - FPCR_STRIDE | \ - FPCR_RMODE | \ - FPCR_FZ | \ - FPCR_DN | \ - FPCR_AHP ) +int feenableexcept(int); +int fedisableexcept(int); +int fegetexcept(void); -#define FPSR_IOC (1 << 0) -#define FPSR_DZC (1 << 1) -#define FPSR_OFC (1 << 2) -#define FPSR_UFC (1 << 3) -#define FPSR_IXC (1 << 4) -#define FPSR_IDC (1 << 7) -#define FPSR_QC (1 << 27) -#define FPSR_V (1 << 28) -#define FPSR_C (1 << 29) -#define FPSR_Z (1 << 30) -#define FPSR_N (1 << 31) -#define FPSR_MASK (FPSR_IOC | \ - FPSR_DZC | \ - FPSR_OFC | \ - FPSR_UFC | \ - FPSR_IXC | \ - FPSR_IDC | \ - FPSR_QC | \ - FPSR_V | \ - FPSR_C | \ - FPSR_Z | \ - FPSR_N ) - -/* Default floating-point environment. */ +/* + * The following constant represents the default floating-point environment + * (that is, the one installed at program startup) and has type pointer to + * const-qualified fenv_t. + * + * It can be used as an argument to the functions that manage the floating-point + * environment, namely fesetenv() and feupdateenv(). + */ extern const fenv_t __fe_dfl_env; -#define FE_DFL_ENV (&__fe_dfl_env) - -static __inline int fegetenv(fenv_t* __envp) { - fenv_t _fpcr, _fpsr; - __asm__ __volatile__("mrs %0,fpcr" : "=r" (_fpcr)); - __asm__ __volatile__("mrs %0,fpsr" : "=r" (_fpsr)); - *__envp = (_fpcr | _fpsr); - return 0; -} - -static __inline int fesetenv(const fenv_t* __envp) { - fenv_t _fpcr = (*__envp & FPCR_MASK); - fenv_t _fpsr = (*__envp & FPSR_MASK); - __asm__ __volatile__("msr fpcr,%0" : :"ri" (_fpcr)); - __asm__ __volatile__("msr fpsr,%0" : :"ri" (_fpsr)); - return 0; -} - -static __inline int feclearexcept(int __excepts) { - fexcept_t __fpscr; - fegetenv(&__fpscr); - __fpscr &= ~__excepts; - fesetenv(&__fpscr); - return 0; -} - -static __inline int fegetexceptflag(fexcept_t* __flagp, int __excepts) { - fexcept_t __fpscr; - fegetenv(&__fpscr); - *__flagp = __fpscr & __excepts; - return 0; -} - -static __inline int fesetexceptflag(const fexcept_t* __flagp, int __excepts) { - fexcept_t __fpscr; - fegetenv(&__fpscr); - __fpscr &= ~__excepts; - __fpscr |= *__flagp & __excepts; - fesetenv(&__fpscr); - return 0; -} - -static __inline int feraiseexcept(int __excepts) { - fexcept_t __ex = __excepts; - fesetexceptflag(&__ex, __excepts); - return 0; -} - -static __inline int fetestexcept(int __excepts) { - fexcept_t __fpscr; - fegetenv(&__fpscr); - return (__fpscr & __excepts); -} - -static __inline int fegetround(void) { - fenv_t _fpscr; - fegetenv(&_fpscr); - return ((_fpscr >> _FPSCR_RMODE_SHIFT) & 0x3); -} - -static __inline int fesetround(int __round) { - fenv_t _fpscr; - fegetenv(&_fpscr); - _fpscr &= ~(0x3 << _FPSCR_RMODE_SHIFT); - _fpscr |= (__round << _FPSCR_RMODE_SHIFT); - fesetenv(&_fpscr); - return 0; -} - -static __inline int feholdexcept(fenv_t* __envp) { - fenv_t __env; - fegetenv(&__env); - *__envp = __env; - __env &= ~(FE_ALL_EXCEPT | _FPSCR_ENABLE_MASK); - fesetenv(&__env); - return 0; -} - -static __inline int feupdateenv(const fenv_t* __envp) { - fexcept_t __fpscr; - fegetenv(&__fpscr); - fesetenv(__envp); - feraiseexcept(__fpscr & FE_ALL_EXCEPT); - return 0; -} - -#if __BSD_VISIBLE - -static __inline int feenableexcept(int __mask) { - fenv_t __old_fpscr, __new_fpscr; - fegetenv(&__old_fpscr); - __new_fpscr = __old_fpscr | (__mask & FE_ALL_EXCEPT) << _FPSCR_ENABLE_SHIFT; - fesetenv(&__new_fpscr); - return ((__old_fpscr >> _FPSCR_ENABLE_SHIFT) & FE_ALL_EXCEPT); -} - -static __inline int fedisableexcept(int __mask) { - fenv_t __old_fpscr, __new_fpscr; - fegetenv(&__old_fpscr); - __new_fpscr = __old_fpscr & ~((__mask & FE_ALL_EXCEPT) << _FPSCR_ENABLE_SHIFT); - fesetenv(&__new_fpscr); - return ((__old_fpscr >> _FPSCR_ENABLE_SHIFT) & FE_ALL_EXCEPT); -} - -static __inline int fegetexcept(void) { - fenv_t __fpscr; - fegetenv(&__fpscr); - return ((__fpscr & _FPSCR_ENABLE_MASK) >> _FPSCR_ENABLE_SHIFT); -} - -#endif /* __BSD_VISIBLE */ +#define FE_DFL_ENV (&__fe_dfl_env) __END_DECLS -#endif /* !_FENV_H_ */ +#endif /* ! _FENV_H_ */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/ftw.h b/9/platforms/android-19/arch-arm64/usr/include/ftw.h index 3bebea3..af524d0 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/ftw.h +++ b/9/platforms/android-19/arch-arm64/usr/include/ftw.h @@ -57,6 +57,9 @@ __BEGIN_DECLS int ftw(const char *, int (*)(const char *, const struct stat *, int), int); int nftw(const char *, int (*)(const char *, const struct stat *, int, struct FTW *), int, int); +int ftw64(const char *, int (*)(const char *, const struct stat64 *, int), int); +int nftw64(const char *, int (*)(const char *, const struct stat64 *, int, + struct FTW *), int, int); __END_DECLS #endif /* !_FTW_H */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/limits.h b/9/platforms/android-19/arch-arm64/usr/include/limits.h index b9d4354..471d380 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/limits.h +++ b/9/platforms/android-19/arch-arm64/usr/include/limits.h @@ -105,9 +105,15 @@ #define ULONG_LONG_MAX ULLONG_MAX #endif +/* New code should use sysconf(_SC_PAGE_SIZE) instead. */ +#ifndef PAGE_SIZE +#define PAGE_SIZE 4096 +#endif #ifndef PAGESIZE -#include <asm/page.h> #define PAGESIZE PAGE_SIZE #endif +/* glibc's PAGE_MASK is the bitwise negation of BSD's! TODO: remove? */ +#define PAGE_MASK (~(PAGE_SIZE - 1)) + #endif /* !_LIMITS_H_ */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/link.h b/9/platforms/android-19/arch-arm64/usr/include/link.h index 341fbf1..cb8e139 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/link.h +++ b/9/platforms/android-19/arch-arm64/usr/include/link.h @@ -33,7 +33,11 @@ __BEGIN_DECLS -#define ElfW(type) Elf_##type +#if __LP64__ +#define ElfW(type) Elf64_ ## type +#else +#define ElfW(type) Elf32_ ## type +#endif struct dl_phdr_info { ElfW(Addr) dlpi_addr; @@ -42,13 +46,35 @@ struct dl_phdr_info { ElfW(Half) dlpi_phnum; }; -int dl_iterate_phdr(int (*cb)(struct dl_phdr_info*, size_t, void*), void*); +int dl_iterate_phdr(int (*)(struct dl_phdr_info*, size_t, void*), void*); #ifdef __arm__ typedef long unsigned int* _Unwind_Ptr; -_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount); +_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr, int*); #endif +/* Used by the dynamic linker to communicate with the debugger. */ +struct link_map { + ElfW(Addr) l_addr; + char* l_name; + ElfW(Dyn)* l_ld; + struct link_map* l_next; + struct link_map* l_prev; +}; + +/* Used by the dynamic linker to communicate with the debugger. */ +struct r_debug { + int32_t r_version; + struct link_map* r_map; + ElfW(Addr) r_brk; + enum { + RT_CONSISTENT, + RT_ADD, + RT_DELETE + } r_state; + ElfW(Addr) r_ldbase; +}; + __END_DECLS #endif /* _LINK_H_ */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/locale.h b/9/platforms/android-19/arch-arm64/usr/include/locale.h index 65b5c7d..b6dbfdb 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/locale.h +++ b/9/platforms/android-19/arch-arm64/usr/include/locale.h @@ -49,11 +49,13 @@ enum { LC_IDENTIFICATION = 12 }; -extern char *setlocale(int category, const char *locale); +extern char* setlocale(int, const char*); -/* Make libstdc++-v3 happy. */ +#if !defined(__LP64__) +// TODO: LP32 had these bogus declarations but LP64 should have a real struct lconv and localeconv(3). struct lconv { }; -struct lconv *localeconv(void); +struct lconv* localeconv(void); +#endif __END_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/machine/asm.h b/9/platforms/android-19/arch-arm64/usr/include/machine/asm.h index 3f8b908..4bfabaf 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/machine/asm.h +++ b/9/platforms/android-19/arch-arm64/usr/include/machine/asm.h @@ -38,91 +38,17 @@ #ifndef _AARCH64_ASM_H_ #define _AARCH64_ASM_H_ -/* TODO: Add cfi directives for creating/restoring FP */ -#ifdef __ELF__ -# define _C_LABEL(x) x -#else -# ifdef __STDC__ -# define _C_LABEL(x) _ ## x -# else -# define _C_LABEL(x) _/**/x -# endif -#endif -#define _ASM_LABEL(x) x - -#ifdef __STDC__ -# define __CONCAT(x,y) x ## y -# define __STRING(x) #x -#else -# define __CONCAT(x,y) x/**/y -# define __STRING(x) "x" -#endif - #ifndef _ALIGN_TEXT -# define _ALIGN_TEXT .align 0 +# define _ALIGN_TEXT .align 0 #endif -#define _ASM_TYPE_FUNCTION %function -#define _ASM_TYPE_OBJECT %object -#define _ENTRY(x) \ - .text; _ALIGN_TEXT; .globl x; .type x,_ASM_TYPE_FUNCTION; x: .cfi_startproc - -#define _ASM_SIZE(x) .size x, .-x; - -#define _END(x) \ - .cfi_endproc; \ - _ASM_SIZE(x) - -#define ENTRY(y) _ENTRY(_C_LABEL(y)); -#define ENTRY_NP(y) _ENTRY(_C_LABEL(y)) -#define END(y) _END(_C_LABEL(y)) -#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE -#define ASENTRY_NP(y) _ENTRY(_ASM_LABEL(y)) -#define ASEND(y) _END(_ASM_LABEL(y)) - -#ifdef __ELF__ -#define ENTRY_PRIVATE(y) ENTRY(y); .hidden _C_LABEL(y) -#else -#define ENTRY_PRIVATE(y) ENTRY(y) -#endif - -#define ASMSTR .asciz +#undef __bionic_asm_function_type +#define __bionic_asm_function_type %function #if defined(__ELF__) && defined(PIC) -#ifdef __STDC__ -#define PIC_SYM(x,y) x ## ( ## y ## ) -#else -#define PIC_SYM(x,y) x/**/(/**/y/**/) -#endif -#else -#define PIC_SYM(x,y) x -#endif - -#ifdef __ELF__ -#define RCSID(x) .section ".ident"; .asciz x +#define PIC_SYM(x,y) x ## ( ## y ## ) #else -#define RCSID(x) .text; .asciz x +#define PIC_SYM(x,y) x #endif -#ifdef __ELF__ -#define WEAK_ALIAS(alias,sym) \ - .weak alias; \ - alias = sym -#endif - -#ifdef __STDC__ -#define WARN_REFERENCES(sym,msg) \ - .stabs msg ## ,30,0,0,0 ; \ - .stabs __STRING(_C_LABEL(sym)) ## ,1,0,0,0 -#elif defined(__ELF__) -#define WARN_REFERENCES(sym,msg) \ - .stabs msg,30,0,0,0 ; \ - .stabs __STRING(sym),1,0,0,0 -#else -#define WARN_REFERENCES(sym,msg) \ - .stabs msg,30,0,0,0 ; \ - .stabs __STRING(_/**/sym),1,0,0,0 -#endif /* __STDC__ */ - #endif /* _AARCH64_ASM_H_ */ - diff --git a/9/platforms/android-19/arch-arm64/usr/include/machine/fenv.h b/9/platforms/android-19/arch-arm64/usr/include/machine/fenv.h new file mode 100644 index 0000000..2efeee3 --- /dev/null +++ b/9/platforms/android-19/arch-arm64/usr/include/machine/fenv.h @@ -0,0 +1,121 @@ +/*- + * Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/lib/msun/arm/fenv.h,v 1.5 2005/03/16 19:03:45 das Exp $ + */ + +/* + * Rewritten for Android. + * + * The ARM FPSCR (Floating-point Status and Control Register) described here: + * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344b/Chdfafia.html + * has been split into the FPCR (Floating-point Control Register) and FPSR + * (Floating-point Status Register) on the ARMv8. These are described briefly in + * "Procedure Call Standard for the ARM 64-bit Architecture" + * http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055a/IHI0055A_aapcs64.pdf + * section 5.1.2 SIMD and Floating-Point Registers + */ + +#ifndef _ARM64_FENV_H_ +#define _ARM64_FENV_H_ + +#include <sys/types.h> + +__BEGIN_DECLS + +typedef __uint32_t fenv_t; +typedef __uint32_t fexcept_t; + +/* Exception flags. */ +#define FE_INVALID 0x01 +#define FE_DIVBYZERO 0x02 +#define FE_OVERFLOW 0x04 +#define FE_UNDERFLOW 0x08 +#define FE_INEXACT 0x10 +#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | FE_INVALID | \ + FE_OVERFLOW | FE_UNDERFLOW) + +#define _FPSCR_ENABLE_SHIFT 8 +#define _FPSCR_ENABLE_MASK (FE_ALL_EXCEPT << _FPSCR_ENABLE_SHIFT) + +/* Rounding modes. */ +#define FE_TONEAREST 0x0 +#define FE_UPWARD 0x1 +#define FE_DOWNWARD 0x2 +#define FE_TOWARDZERO 0x3 + +#define _FPSCR_RMODE_SHIFT 22 + +#define FPCR_IOE (1 << 8) +#define FPCR_DZE (1 << 9) +#define FPCR_OFE (1 << 10) +#define FPCR_UFE (1 << 11) +#define FPCR_IXE (1 << 12) +#define FPCR_IDE (1 << 15) +#define FPCR_LEN (7 << 16) +#define FPCR_STRIDE (3 << 20) +#define FPCR_RMODE (3 << 22) +#define FPCR_FZ (1 << 24) +#define FPCR_DN (1 << 25) +#define FPCR_AHP (1 << 26) +#define FPCR_MASK (FPCR_IOE | \ + FPCR_DZE | \ + FPCR_OFE | \ + FPCR_UFE | \ + FPCR_IXE | \ + FPCR_IDE | \ + FPCR_LEN | \ + FPCR_STRIDE | \ + FPCR_RMODE | \ + FPCR_FZ | \ + FPCR_DN | \ + FPCR_AHP ) + +#define FPSR_IOC (1 << 0) +#define FPSR_DZC (1 << 1) +#define FPSR_OFC (1 << 2) +#define FPSR_UFC (1 << 3) +#define FPSR_IXC (1 << 4) +#define FPSR_IDC (1 << 7) +#define FPSR_QC (1 << 27) +#define FPSR_V (1 << 28) +#define FPSR_C (1 << 29) +#define FPSR_Z (1 << 30) +#define FPSR_N (1 << 31) +#define FPSR_MASK (FPSR_IOC | \ + FPSR_DZC | \ + FPSR_OFC | \ + FPSR_UFC | \ + FPSR_IXC | \ + FPSR_IDC | \ + FPSR_QC | \ + FPSR_V | \ + FPSR_C | \ + FPSR_Z | \ + FPSR_N ) + +__END_DECLS + +#endif /* !_ARM64_FENV_H_ */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/math.h b/9/platforms/android-19/arch-arm64/usr/include/math.h index b13eca9..bd0241b 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/math.h +++ b/9/platforms/android-19/arch-arm64/usr/include/math.h @@ -18,7 +18,6 @@ #define _MATH_H_ #include <sys/cdefs.h> -#include <sys/_types.h> #include <limits.h> /* @@ -124,8 +123,10 @@ extern const union __nan_un { : (sizeof (x) == sizeof (double)) ? __signbit(x) \ : __signbitl(x)) -typedef __double_t double_t; -typedef __float_t float_t; +typedef double __double_t; +typedef __double_t double_t; +typedef float __float_t; +typedef __float_t float_t; #endif /* __ISO_C_VISIBLE >= 1999 */ /* diff --git a/9/platforms/android-19/arch-arm64/usr/include/pthread.h b/9/platforms/android-19/arch-arm64/usr/include/pthread.h index c5380be..f93f9e9 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/pthread.h +++ b/9/platforms/android-19/arch-arm64/usr/include/pthread.h @@ -127,11 +127,13 @@ int pthread_attr_setschedparam(pthread_attr_t*, const struct sched_param*) __non int pthread_attr_setschedpolicy(pthread_attr_t*, int) __nonnull((1)); int pthread_attr_setscope(pthread_attr_t*, int) __nonnull((1)); int pthread_attr_setstack(pthread_attr_t*, void*, size_t) __nonnull((1)); -int pthread_attr_setstacksize(pthread_attr_t * attr, size_t stack_size) __nonnull((1)); +int pthread_attr_setstacksize(pthread_attr_t*, size_t stack_size) __nonnull((1)); int pthread_condattr_destroy(pthread_condattr_t*) __nonnull((1)); +int pthread_condattr_getclock(const pthread_condattr_t*, clockid_t*) __nonnull((1, 2)); int pthread_condattr_getpshared(const pthread_condattr_t*, int*) __nonnull((1, 2)); int pthread_condattr_init(pthread_condattr_t*) __nonnull((1)); +int pthread_condattr_setclock(pthread_condattr_t*, clockid_t) __nonnull((1)); int pthread_condattr_setpshared(pthread_condattr_t*, int) __nonnull((1)); int pthread_cond_broadcast(pthread_cond_t*) __nonnull((1)); @@ -172,7 +174,7 @@ int pthread_mutexattr_settype(pthread_mutexattr_t*, int) __nonnull((1)); int pthread_mutex_destroy(pthread_mutex_t*) __nonnull((1)); int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) __nonnull((1)); int pthread_mutex_lock(pthread_mutex_t*) __nonnull((1)); -int pthread_mutex_timedlock(pthread_mutex_t*, struct timespec*) __nonnull((1, 2)); +int pthread_mutex_timedlock(pthread_mutex_t*, const struct timespec*) __nonnull((1, 2)); int pthread_mutex_trylock(pthread_mutex_t*) __nonnull((1)); int pthread_mutex_unlock(pthread_mutex_t*) __nonnull((1)); @@ -232,32 +234,17 @@ extern void __pthread_cleanup_pop(__pthread_cleanup_t*, int); #if !defined(__LP64__) -/* Deprecated by POSIX. TODO: support for LP64 but add deprecated attribute instead? */ -int pthread_attr_getstackaddr(const pthread_attr_t*, void**) __nonnull((1, 2)); /* deprecated */ -int pthread_attr_setstackaddr(pthread_attr_t*, void*) __nonnull((1)); /* deprecated */ - -/* Bionic additions that are deprecated even in the 32-bit ABI. */ +// Bionic additions that are deprecated even in the 32-bit ABI. +// +// TODO: Remove them once chromium_org / NFC have switched over. int pthread_cond_timedwait_monotonic_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); int pthread_cond_timedwait_monotonic(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); -#define HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC 1 - -/* - * Like pthread_cond_timedwait except 'reltime' is relative to the current time. - * TODO: not like glibc; include in LP64? - */ -int pthread_cond_timedwait_relative_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); -#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE 1 -/* TODO: not like glibc; include in LP64? */ -int pthread_cond_timeout_np(pthread_cond_t*, pthread_mutex_t*, unsigned); +int pthread_cond_timedwait_relative_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*) /* TODO: __attribute__((deprecated("use pthread_cond_timedwait instead")))*/; +#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE 1 /* TODO: stop defining this to push LP32 off this API sooner. */ +int pthread_cond_timeout_np(pthread_cond_t*, pthread_mutex_t*, unsigned) /* TODO: __attribute__((deprecated("use pthread_cond_timedwait instead")))*/; -/* Like pthread_mutex_lock(), but will wait up to 'msecs' milli-seconds - * before returning. Same return values as pthread_mutex_trylock though, i.e. - * returns EBUSY if the lock could not be acquired after the timeout expired. - * - * TODO: replace with pthread_mutex_timedlock_np for LP64. - */ -int pthread_mutex_lock_timeout_np(pthread_mutex_t*, unsigned); +int pthread_mutex_lock_timeout_np(pthread_mutex_t*, unsigned) __attribute__((deprecated("use pthread_mutex_timedlock instead"))); #endif /* !defined(__LP64__) */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/search.h b/9/platforms/android-19/arch-arm64/usr/include/search.h index e12e49e..1301a08 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/search.h +++ b/9/platforms/android-19/arch-arm64/usr/include/search.h @@ -10,7 +10,6 @@ #define _SEARCH_H_ #include <sys/cdefs.h> -#include <sys/_types.h> typedef enum { preorder, diff --git a/9/platforms/android-19/arch-arm64/usr/include/signal.h b/9/platforms/android-19/arch-arm64/usr/include/signal.h index 0159bf2..267f3e6 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/signal.h +++ b/9/platforms/android-19/arch-arm64/usr/include/signal.h @@ -51,20 +51,23 @@ __BEGIN_DECLS typedef int sig_atomic_t; -/* TODO: 64-bit: we should probably #undef the uapi NSIG and add a unit test that NSIG == _NSIG && NSIG >= 64. */ -#ifndef _NSIG -# define _NSIG 64 -#endif -#ifndef NSIG -# define NSIG _NSIG +/* The arm and x86 kernel header files don't define _NSIG. */ +#ifndef _KERNEL__NSIG +#define _KERNEL__NSIG 64 #endif +/* Userspace's NSIG is the kernel's _NSIG + 1. */ +#define _NSIG (_KERNEL__NSIG + 1) +#define NSIG _NSIG + extern const char* const sys_siglist[]; -extern const char* const sys_signame[]; +extern const char* const sys_signame[]; /* BSD compatibility. */ typedef __sighandler_t sig_t; /* BSD compatibility. */ typedef __sighandler_t sighandler_t; /* glibc compatibility. */ +#define si_timerid si_tid /* glibc compatibility. */ + #if defined(__LP64__) struct sigaction { diff --git a/9/platforms/android-19/arch-arm64/usr/include/stdint.h b/9/platforms/android-19/arch-arm64/usr/include/stdint.h index be49485..1f3d003 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/stdint.h +++ b/9/platforms/android-19/arch-arm64/usr/include/stdint.h @@ -30,7 +30,28 @@ #define _STDINT_H #include <stddef.h> -#include <sys/_types.h> + +typedef __signed char __int8_t; +typedef unsigned char __uint8_t; +typedef short __int16_t; +typedef unsigned short __uint16_t; +typedef int __int32_t; +typedef unsigned int __uint32_t; +#if __LP64__ +typedef long __int64_t; +typedef unsigned long __uint64_t; +#else +typedef long long __int64_t; +typedef unsigned long long __uint64_t; +#endif + +#if __LP64__ +typedef long __intptr_t; +typedef unsigned long __uintptr_t; +#else +typedef int __intptr_t; +typedef unsigned int __uintptr_t; +#endif typedef __int8_t int8_t; typedef __uint8_t uint8_t; @@ -44,40 +65,41 @@ typedef __uint32_t uint32_t; typedef __int64_t int64_t; typedef __uint64_t uint64_t; -typedef int8_t int_least8_t; -typedef int8_t int_fast8_t; +typedef __intptr_t intptr_t; +typedef __uintptr_t uintptr_t; +typedef int8_t int_least8_t; typedef uint8_t uint_least8_t; -typedef uint8_t uint_fast8_t; typedef int16_t int_least16_t; -typedef int32_t int_fast16_t; - typedef uint16_t uint_least16_t; -typedef uint32_t uint_fast16_t; typedef int32_t int_least32_t; -typedef int32_t int_fast32_t; - typedef uint32_t uint_least32_t; -typedef uint32_t uint_fast32_t; typedef int64_t int_least64_t; -typedef int64_t int_fast64_t; - typedef uint64_t uint_least64_t; + +typedef int8_t int_fast8_t; +typedef uint8_t uint_fast8_t; + +typedef int64_t int_fast64_t; typedef uint64_t uint_fast64_t; #ifdef __LP64__ -typedef long intptr_t; -typedef unsigned long uintptr_t; +typedef int64_t int_fast16_t; +typedef uint64_t uint_fast16_t; +typedef int64_t int_fast32_t; +typedef uint64_t uint_fast32_t; #else -typedef int intptr_t; -typedef unsigned int uintptr_t; +typedef int32_t int_fast16_t; +typedef uint32_t uint_fast16_t; +typedef int32_t int_fast32_t; +typedef uint32_t uint_fast32_t; #endif -typedef uint64_t uintmax_t; -typedef int64_t intmax_t; +typedef uint64_t uintmax_t; +typedef int64_t intmax_t; /* Keep the kernel from trying to define these types... */ #define __BIT_TYPES_DEFINED__ diff --git a/9/platforms/android-19/arch-arm64/usr/include/stdio.h b/9/platforms/android-19/arch-arm64/usr/include/stdio.h index c241d94..7d30b38 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/stdio.h +++ b/9/platforms/android-19/arch-arm64/usr/include/stdio.h @@ -359,83 +359,6 @@ __END_DECLS #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) #endif /* __BSD_VISIBLE */ -/* - * Functions internal to the implementation. - */ -__BEGIN_DECLS -int __srget(FILE *); -int __swbuf(int, FILE *); -__END_DECLS - -/* - * The __sfoo macros are here so that we can - * define function versions in the C library. - */ -#define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++)) -#if defined(__GNUC__) -static __inline int __sputc(int _c, FILE *_p) { - if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) - return (*_p->_p++ = _c); - else - return (__swbuf(_c, _p)); -} -#else -/* - * This has been tuned to generate reasonable code on the vax using pcc. - */ -#define __sputc(c, p) \ - (--(p)->_w < 0 ? \ - (p)->_w >= (p)->_lbfsize ? \ - (*(p)->_p = (c)), *(p)->_p != '\n' ? \ - (int)*(p)->_p++ : \ - __swbuf('\n', p) : \ - __swbuf((int)(c), p) : \ - (*(p)->_p = (c), (int)*(p)->_p++)) -#endif - -#define __sfeof(p) (((p)->_flags & __SEOF) != 0) -#define __sferror(p) (((p)->_flags & __SERR) != 0) -#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) -#define __sfileno(p) ((p)->_file) - -extern int __isthreaded; - -#define feof(p) (!__isthreaded ? __sfeof(p) : (feof)(p)) -#define ferror(p) (!__isthreaded ? __sferror(p) : (ferror)(p)) -#define clearerr(p) (!__isthreaded ? __sclearerr(p) : (clearerr)(p)) - -#if __POSIX_VISIBLE -#define fileno(p) (!__isthreaded ? __sfileno(p) : (fileno)(p)) -#endif - -#define getc(fp) (!__isthreaded ? __sgetc(fp) : (getc)(fp)) - -#if __BSD_VISIBLE -/* - * The macro implementations of putc and putc_unlocked are not - * fully POSIX compliant; they do not set errno on failure - */ -#define putc(x, fp) (!__isthreaded ? __sputc(x, fp) : (putc)(x, fp)) -#endif /* __BSD_VISIBLE */ - -#ifndef lint -#if __POSIX_VISIBLE >= 199506 -#define getc_unlocked(fp) __sgetc(fp) -/* - * The macro implementations of putc and putc_unlocked are not - * fully POSIX compliant; they do not set errno on failure - */ -#if __BSD_VISIBLE -#define putc_unlocked(x, fp) __sputc(x, fp) -#endif /* __BSD_VISIBLE */ -#endif /* __POSIX_VISIBLE >= 199506 */ -#endif /* lint */ - -#define getchar() getc(stdin) -#define putchar(x) putc(x, stdout) -#define getchar_unlocked() getc_unlocked(stdin) -#define putchar_unlocked(c) putc_unlocked(c, stdout) - #ifdef _GNU_SOURCE /* * glibc defines dprintf(int, const char*, ...), which is poorly named @@ -470,8 +393,10 @@ int vsprintf(char *dest, const char *format, __va_list ap) } #if defined(__clang__) +#if !defined(WITH_SYNTAX_CHECK) #define __wrap_snprintf(dest, size, ...) __builtin___snprintf_chk(dest, size, 0, __bos(dest), __VA_ARGS__) #define snprintf(...) __wrap_snprintf(__VA_ARGS__) +#endif #else __BIONIC_FORTIFY_INLINE __printflike(3, 4) @@ -483,8 +408,10 @@ int snprintf(char *dest, size_t size, const char *format, ...) #endif #if defined(__clang__) +#if !defined(WITH_SYNTAX_CHECK) #define __wrap_sprintf(dest, ...) __builtin___sprintf_chk(dest, 0, __bos(dest), __VA_ARGS__) #define sprintf(...) __wrap_sprintf(__VA_ARGS__) +#endif #else __BIONIC_FORTIFY_INLINE __printflike(2, 3) diff --git a/9/platforms/android-19/arch-arm64/usr/include/stdlib.h b/9/platforms/android-19/arch-arm64/usr/include/stdlib.h index 72b554f..9b7e6d1 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/stdlib.h +++ b/9/platforms/android-19/arch-arm64/usr/include/stdlib.h @@ -54,28 +54,23 @@ extern int clearenv(void); extern char* mkdtemp(char*); extern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp"); extern int mkstemp(char*); +extern int mkstemp64(char*); extern long strtol(const char *, char **, int); extern long long strtoll(const char *, char **, int); extern unsigned long strtoul(const char *, char **, int); extern unsigned long long strtoull(const char *, char **, int); -extern double strtod(const char *nptr, char **endptr); extern int posix_memalign(void **memptr, size_t alignment, size_t size); -static __inline__ float strtof(const char *nptr, char **endptr) -{ - return (float)strtod(nptr, endptr); -} - -extern int atoi(const char *) __purefunc; -extern long atol(const char *) __purefunc; -extern long long atoll(const char *) __purefunc; +extern double atof(const char*); +extern double strtod(const char*, char**); +extern float strtof(const char*, char**); +extern long double strtold(const char*, char**); -static __inline__ double atof(const char *nptr) -{ - return (strtod(nptr, NULL)); -} +extern int atoi(const char*) __purefunc; +extern long atol(const char*) __purefunc; +extern long long atoll(const char*) __purefunc; extern int abs(int) __pure2; extern long labs(long) __pure2; @@ -152,6 +147,10 @@ typedef struct { extern lldiv_t lldiv(long long, long long); +/* BSD compatibility. */ +extern const char* getprogname(void); +extern void setprogname(const char*); + #if 1 /* MISSING FROM BIONIC - ENABLED FOR STLPort and libstdc++-v3 */ /* make STLPort happy */ extern int mblen(const char *, size_t); diff --git a/9/platforms/android-19/arch-arm64/usr/include/string.h b/9/platforms/android-19/arch-arm64/usr/include/string.h index 37d22c4..f00e291 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/string.h +++ b/9/platforms/android-19/arch-arm64/usr/include/string.h @@ -42,13 +42,13 @@ extern void* memcpy(void* __restrict, const void* __restrict, size_t); extern void* memmove(void *, const void *, size_t); extern void* memset(void *, int, size_t); extern void* memmem(const void *, size_t, const void *, size_t) __purefunc; -extern void memswap(void *, void *, size_t); extern char* index(const char *, int) __purefunc; extern char* strchr(const char *, int) __purefunc; extern char* __strchr_chk(const char *, int, size_t); extern char* strrchr(const char *, int) __purefunc; +extern char* __strrchr_chk(const char *, int, size_t); extern size_t strlen(const char *) __purefunc; extern size_t __strlen_chk(const char *, size_t); @@ -244,6 +244,7 @@ size_t strlen(const char *s) { return __strlen_chk(s, bos); } +#if !defined(HAS_STRCHR) __BIONIC_FORTIFY_INLINE char* strchr(const char *s, int c) { size_t bos = __bos(s); @@ -262,8 +263,7 @@ char* strchr(const char *s, int c) { return __strchr_chk(s, c, bos); } - -extern char* __strrchr_chk(const char *, int, size_t); +#endif __BIONIC_FORTIFY_INLINE char* strrchr(const char *s, int c) { diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/_sigdefs.h b/9/platforms/android-19/arch-arm64/usr/include/sys/_sigdefs.h index eadf7b9..44d60d9 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/_sigdefs.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/_sigdefs.h @@ -35,67 +35,41 @@ #error __BIONIC_SIGDEF not defined #endif -__BIONIC_SIGDEF(HUP,1,"Hangup") -__BIONIC_SIGDEF(INT,2,"Interrupt") -__BIONIC_SIGDEF(QUIT,3,"Quit") -__BIONIC_SIGDEF(ILL,4,"Illegal instruction") -__BIONIC_SIGDEF(TRAP,5,"Trap") -__BIONIC_SIGDEF(ABRT,6,"Aborted") -#ifdef __mips__ -__BIONIC_SIGDEF(EMT,7,"EMT") -#else -__BIONIC_SIGDEF(BUS,7,"Bus error") +__BIONIC_SIGDEF(SIGHUP, "Hangup") +__BIONIC_SIGDEF(SIGINT, "Interrupt") +__BIONIC_SIGDEF(SIGQUIT, "Quit") +__BIONIC_SIGDEF(SIGILL, "Illegal instruction") +__BIONIC_SIGDEF(SIGTRAP, "Trap") +__BIONIC_SIGDEF(SIGABRT, "Aborted") +#ifdef SIGEMT +__BIONIC_SIGDEF(SIGEMT, "EMT") #endif -__BIONIC_SIGDEF(FPE,8,"Floating point exception") -__BIONIC_SIGDEF(KILL,9,"Killed") -#ifdef __mips__ -__BIONIC_SIGDEF(BUS,10,"Bus error") -#else -__BIONIC_SIGDEF(USR1,10,"User signal 1") -#endif -__BIONIC_SIGDEF(SEGV,11,"Segmentation fault") -#ifdef __mips__ -__BIONIC_SIGDEF(SYS,12,"Bad system call") -#else -__BIONIC_SIGDEF(USR2,12,"User signal 2") -#endif -__BIONIC_SIGDEF(PIPE,13,"Broken pipe") -__BIONIC_SIGDEF(ALRM,14,"Alarm clock") -__BIONIC_SIGDEF(TERM,15,"Terminated") -#ifdef __mips__ -__BIONIC_SIGDEF(USR1,16,"User signal 1") -__BIONIC_SIGDEF(USR2,17,"User signal 2") -__BIONIC_SIGDEF(CHLD,18,"Child exited") -__BIONIC_SIGDEF(PWR,19,"Power failure") -__BIONIC_SIGDEF(WINCH,20,"Window size changed") -__BIONIC_SIGDEF(URG,21,"Urgent I/O condition") -__BIONIC_SIGDEF(IO,22,"I/O possible") -__BIONIC_SIGDEF(STOP,23,"Stopped (signal)") -__BIONIC_SIGDEF(TSTP,24,"Stopped") -__BIONIC_SIGDEF(CONT,25,"Continue") -__BIONIC_SIGDEF(TTIN,26,"Stopped (tty input)") -__BIONIC_SIGDEF(TTOU,27,"Stopped (tty output)") -__BIONIC_SIGDEF(VTALRM,28,"Virtual timer expired") -__BIONIC_SIGDEF(PROF,29,"Profiling timer expired") -__BIONIC_SIGDEF(XCPU,30,"CPU time limit exceeded") -__BIONIC_SIGDEF(XFSZ,31,"File size limit exceeded") -#else -__BIONIC_SIGDEF(STKFLT,16,"Stack fault") -__BIONIC_SIGDEF(CHLD,17,"Child exited") -__BIONIC_SIGDEF(CONT,18,"Continue") -__BIONIC_SIGDEF(STOP,19,"Stopped (signal)") -__BIONIC_SIGDEF(TSTP,20,"Stopped") -__BIONIC_SIGDEF(TTIN,21,"Stopped (tty input)") -__BIONIC_SIGDEF(TTOU,22,"Stopped (tty output)") -__BIONIC_SIGDEF(URG,23,"Urgent I/O condition") -__BIONIC_SIGDEF(XCPU,24,"CPU time limit exceeded") -__BIONIC_SIGDEF(XFSZ,25,"File size limit exceeded") -__BIONIC_SIGDEF(VTALRM,26,"Virtual timer expired") -__BIONIC_SIGDEF(PROF,27,"Profiling timer expired") -__BIONIC_SIGDEF(WINCH,28,"Window size changed") -__BIONIC_SIGDEF(IO,29,"I/O possible") -__BIONIC_SIGDEF(PWR,30,"Power failure") -__BIONIC_SIGDEF(SYS,31,"Bad system call") +__BIONIC_SIGDEF(SIGFPE, "Floating point exception") +__BIONIC_SIGDEF(SIGKILL, "Killed") +__BIONIC_SIGDEF(SIGBUS, "Bus error") +__BIONIC_SIGDEF(SIGSEGV, "Segmentation fault") +__BIONIC_SIGDEF(SIGPIPE, "Broken pipe") +__BIONIC_SIGDEF(SIGALRM, "Alarm clock") +__BIONIC_SIGDEF(SIGTERM, "Terminated") +__BIONIC_SIGDEF(SIGUSR1, "User signal 1") +__BIONIC_SIGDEF(SIGUSR2, "User signal 2") +__BIONIC_SIGDEF(SIGCHLD, "Child exited") +__BIONIC_SIGDEF(SIGPWR, "Power failure") +__BIONIC_SIGDEF(SIGWINCH, "Window size changed") +__BIONIC_SIGDEF(SIGURG, "Urgent I/O condition") +__BIONIC_SIGDEF(SIGIO, "I/O possible") +__BIONIC_SIGDEF(SIGSTOP, "Stopped (signal)") +__BIONIC_SIGDEF(SIGTSTP, "Stopped") +__BIONIC_SIGDEF(SIGCONT, "Continue") +__BIONIC_SIGDEF(SIGTTIN, "Stopped (tty input)") +__BIONIC_SIGDEF(SIGTTOU, "Stopped (tty output)") +__BIONIC_SIGDEF(SIGVTALRM, "Virtual timer expired") +__BIONIC_SIGDEF(SIGPROF, "Profiling timer expired") +__BIONIC_SIGDEF(SIGXCPU, "CPU time limit exceeded") +__BIONIC_SIGDEF(SIGXFSZ, "File size limit exceeded") +#if defined(SIGSTKFLT) +__BIONIC_SIGDEF(SIGSTKFLT, "Stack fault") #endif +__BIONIC_SIGDEF(SIGSYS, "Bad system call") #undef __BIONIC_SIGDEF diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/_system_properties.h b/9/platforms/android-19/arch-arm64/usr/include/sys/_system_properties.h index 5eee7f0..5a681df 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/_system_properties.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/_system_properties.h @@ -139,6 +139,14 @@ int __system_property_foreach_compat( void (*propfn)(const prop_info *pi, void *cookie), void *cookie); +/* Initialize the system properties area in read only mode. + * Should be done by all processes that need to read system + * properties. + * + * Returns 0 on success, -1 otherwise. + */ +int __system_properties_init(); + __END_DECLS #endif diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/_types.h b/9/platforms/android-19/arch-arm64/usr/include/sys/_types.h index 6bf9c1c..7b99e06 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/_types.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/_types.h @@ -32,50 +32,15 @@ */ #ifndef _SYS__TYPES_H_ -#define _SYS__TYPES_H_ +#define _SYS__TYPES_H_ -typedef __signed char __int8_t; -typedef unsigned char __uint8_t; -typedef short __int16_t; -typedef unsigned short __uint16_t; -typedef int __int32_t; -typedef unsigned int __uint32_t; -#if __LP64__ -typedef long __int64_t; -typedef unsigned long __uint64_t; -#else -typedef long long __int64_t; -typedef unsigned long long __uint64_t; -#endif +#undef __KERNEL_STRICT_NAMES +#define __KERNEL_STRICT_NAMES 1 -#if __LP64__ -typedef long __intptr_t; -typedef unsigned long __uintptr_t; -#else -typedef int __intptr_t; -typedef unsigned int __uintptr_t; -#endif - -#if __LP64__ -typedef long __time_t; -#else -typedef int __time_t; /* Historical accident. */ -#endif - -typedef int __timer_t; - -typedef int __clockid_t; - -#ifndef __cplusplus -typedef int __wchar_t; -#endif - -typedef double __double_t; -typedef float __float_t; - -typedef __builtin_va_list __va_list; +#include <machine/_types.h> typedef unsigned long __cpuid_t; /* CPU id */ +typedef __int32_t __dev_t; /* device number */ typedef __uint32_t __fixpt_t; /* fixed point number */ typedef __uint32_t __gid_t; /* group id */ typedef __uint32_t __id_t; /* may contain pid, uid or gid */ @@ -104,4 +69,9 @@ typedef union { __int64_t __mbstateL; /* for alignment */ } __mbstate_t; +/* BIONIC: if we're using non-cleaned up user-level kernel headers, + * this will prevent many type declaration conflicts + */ +#define __KERNEL_STRICT_NAMES 1 + #endif /* !_SYS__TYPES_H_ */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/exec_elf.h b/9/platforms/android-19/arch-arm64/usr/include/sys/exec_elf.h index d14c596..f72f81e 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/exec_elf.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/exec_elf.h @@ -1,11 +1,6 @@ -/* $NetBSD: exec_elf.h,v 1.131 2013/10/29 00:22:59 christos Exp $ */ - -/*- - * Copyright (c) 1994 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Christos Zoulas. +/* $OpenBSD: exec_elf.h,v 1.41 2006/01/06 18:53:05 millert Exp $ */ +/* + * Copyright (c) 1995, 1996 Erik Theisen. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -15,164 +10,101 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This is the ELF ABI header file + * formerly known as "elf_abi.h". */ #ifndef _SYS_EXEC_ELF_H_ #define _SYS_EXEC_ELF_H_ -/* - * The current ELF ABI specification is available at: - * http://www.sco.com/developers/gabi/ - * - * Current header definitions are in: - * http://www.sco.com/developers/gabi/latest/ch4.eheader.html - */ +#include <machine/_types.h> +#include <machine/exec.h> -#if defined(_KERNEL) || defined(_STANDALONE) -#include <sys/types.h> -#else -#include <inttypes.h> -#endif /* _KERNEL || _STANDALONE */ +typedef __uint8_t Elf_Byte; -#if HAVE_NBTOOL_CONFIG_H -#include <nbinclude/machine/elf_machdep.h> +typedef __uint32_t Elf32_Addr; /* Unsigned program address */ +typedef __uint32_t Elf32_Off; /* Unsigned file offset */ +typedef __int32_t Elf32_Sword; /* Signed large integer */ +typedef __uint32_t Elf32_Word; /* Unsigned large integer */ +typedef __uint16_t Elf32_Half; /* Unsigned medium integer */ + +typedef __uint64_t Elf64_Addr; +typedef __uint64_t Elf64_Off; +typedef __int32_t Elf64_Shalf; + +#ifdef __alpha__ +typedef __int64_t Elf64_Sword; +typedef __uint64_t Elf64_Word; #else -#include <machine/elf_machdep.h> +typedef __int32_t Elf64_Sword; +typedef __uint32_t Elf64_Word; #endif -typedef uint8_t Elf_Byte; - -typedef uint32_t Elf32_Addr; -#define ELF32_FSZ_ADDR 4 -typedef uint32_t Elf32_Off; -typedef int32_t Elf32_SOff; -#define ELF32_FSZ_OFF 4 -typedef int32_t Elf32_Sword; -#define ELF32_FSZ_SWORD 4 -typedef uint32_t Elf32_Word; -#define ELF32_FSZ_WORD 4 -typedef uint16_t Elf32_Half; -#define ELF32_FSZ_HALF 2 -typedef uint64_t Elf32_Lword; -#define ELF32_FSZ_LWORD 8 - -typedef uint64_t Elf64_Addr; -#define ELF64_FSZ_ADDR 8 -typedef uint64_t Elf64_Off; -typedef int64_t Elf64_SOff; -#define ELF64_FSZ_OFF 8 -typedef int32_t Elf64_Shalf; -#define ELF64_FSZ_SHALF 4 - -typedef int32_t Elf64_Sword; -#define ELF64_FSZ_SWORD 4 -typedef uint32_t Elf64_Word; -#define ELF64_FSZ_WORD 4 - -typedef int64_t Elf64_Sxword; -#define ELF64_FSZ_SXWORD 8 -typedef uint64_t Elf64_Xword; -#define ELF64_FSZ_XWORD 8 -typedef uint64_t Elf64_Lword; -#define ELF64_FSZ_LWORD 8 -typedef uint16_t Elf64_Half; -#define ELF64_FSZ_HALF 2 +typedef __int64_t Elf64_Sxword; +typedef __uint64_t Elf64_Xword; + +typedef __uint32_t Elf64_Half; +typedef __uint16_t Elf64_Quarter; /* - * ELF Header + * e_ident[] identification indexes + * See http://www.caldera.com/developers/gabi/2000-07-17/ch4.eheader.html */ -#define ELF_NIDENT 16 - -typedef struct { - unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ - Elf32_Half e_type; /* file type */ - Elf32_Half e_machine; /* machine type */ - Elf32_Word e_version; /* version number */ - Elf32_Addr e_entry; /* entry point */ - Elf32_Off e_phoff; /* Program hdr offset */ - Elf32_Off e_shoff; /* Section hdr offset */ - Elf32_Word e_flags; /* Processor flags */ - Elf32_Half e_ehsize; /* sizeof ehdr */ - Elf32_Half e_phentsize; /* Program header entry size */ - Elf32_Half e_phnum; /* Number of program headers */ - Elf32_Half e_shentsize; /* Section header entry size */ - Elf32_Half e_shnum; /* Number of section headers */ - Elf32_Half e_shstrndx; /* String table index */ -} Elf32_Ehdr; - -typedef struct { - unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ - Elf64_Half e_type; /* file type */ - Elf64_Half e_machine; /* machine type */ - Elf64_Word e_version; /* version number */ - Elf64_Addr e_entry; /* entry point */ - Elf64_Off e_phoff; /* Program hdr offset */ - Elf64_Off e_shoff; /* Section hdr offset */ - Elf64_Word e_flags; /* Processor flags */ - Elf64_Half e_ehsize; /* sizeof ehdr */ - Elf64_Half e_phentsize; /* Program header entry size */ - Elf64_Half e_phnum; /* Number of program headers */ - Elf64_Half e_shentsize; /* Section header entry size */ - Elf64_Half e_shnum; /* Number of section headers */ - Elf64_Half e_shstrndx; /* String table index */ -} Elf64_Ehdr; - -/* e_ident offsets */ -#define EI_MAG0 0 /* '\177' */ -#define EI_MAG1 1 /* 'E' */ -#define EI_MAG2 2 /* 'L' */ -#define EI_MAG3 3 /* 'F' */ -#define EI_CLASS 4 /* File class */ -#define EI_DATA 5 /* Data encoding */ -#define EI_VERSION 6 /* File version */ -#define EI_OSABI 7 /* Operating system/ABI identification */ -#define EI_ABIVERSION 8 /* ABI version */ -#define EI_PAD 9 /* Start of padding bytes up to EI_NIDENT*/ -#define EI_NIDENT 16 /* First non-ident header byte */ - -/* e_ident[EI_MAG0,EI_MAG3] */ -#define ELFMAG0 0x7f -#define ELFMAG1 'E' -#define ELFMAG2 'L' -#define ELFMAG3 'F' -#define ELFMAG "\177ELF" -#define SELFMAG 4 - -/* e_ident[EI_CLASS] */ -#define ELFCLASSNONE 0 /* Invalid class */ -#define ELFCLASS32 1 /* 32-bit objects */ -#define ELFCLASS64 2 /* 64-bit objects */ -#define ELFCLASSNUM 3 - -/* e_ident[EI_DATA] */ -#define ELFDATANONE 0 /* Invalid data encoding */ -#define ELFDATA2LSB 1 /* 2's complement values, LSB first */ -#define ELFDATA2MSB 2 /* 2's complement values, MSB first */ - -/* e_ident[EI_VERSION] */ -#define EV_NONE 0 /* Invalid version */ -#define EV_CURRENT 1 /* Current version */ -#define EV_NUM 2 - -/* e_ident[EI_OSABI] */ +#define EI_MAG0 0 /* file ID */ +#define EI_MAG1 1 /* file ID */ +#define EI_MAG2 2 /* file ID */ +#define EI_MAG3 3 /* file ID */ +#define EI_CLASS 4 /* file class */ +#define EI_DATA 5 /* data encoding */ +#define EI_VERSION 6 /* ELF header version */ +#define EI_OSABI 7 /* OS/ABI ID */ +#define EI_ABIVERSION 8 /* ABI version */ +#define EI_PAD 9 /* start of pad bytes */ +#define EI_NIDENT 16 /* Size of e_ident[] */ + +/* e_ident[] magic number */ +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ +#define ELFMAG "\177ELF" /* magic */ +#define SELFMAG 4 /* size of magic */ + +/* e_ident[] file class */ +#define ELFCLASSNONE 0 /* invalid */ +#define ELFCLASS32 1 /* 32-bit objs */ +#define ELFCLASS64 2 /* 64-bit objs */ +#define ELFCLASSNUM 3 /* number of classes */ + +/* e_ident[] data encoding */ +#define ELFDATANONE 0 /* invalid */ +#define ELFDATA2LSB 1 /* Little-Endian */ +#define ELFDATA2MSB 2 /* Big-Endian */ +#define ELFDATANUM 3 /* number of data encode defines */ + +/* e_ident[] Operating System/ABI */ #define ELFOSABI_SYSV 0 /* UNIX System V ABI */ #define ELFOSABI_HPUX 1 /* HP-UX operating system */ #define ELFOSABI_NETBSD 2 /* NetBSD */ #define ELFOSABI_LINUX 3 /* GNU/Linux */ #define ELFOSABI_HURD 4 /* GNU/Hurd */ -#define ELFOSABI_86OPEN 5 /* 86Open */ +#define ELFOSABI_86OPEN 5 /* 86Open common IA32 ABI */ #define ELFOSABI_SOLARIS 6 /* Solaris */ #define ELFOSABI_MONTEREY 7 /* Monterey */ #define ELFOSABI_IRIX 8 /* IRIX */ @@ -180,832 +112,421 @@ typedef struct { #define ELFOSABI_TRU64 10 /* TRU64 UNIX */ #define ELFOSABI_MODESTO 11 /* Novell Modesto */ #define ELFOSABI_OPENBSD 12 /* OpenBSD */ -#define ELFOSABI_OPENVMS 13 /* OpenVMS */ -#define ELFOSABI_NSK 14 /* HP Non-Stop Kernel */ -#define ELFOSABI_AROS 15 /* Amiga Research OS */ -/* Unofficial OSABIs follow */ #define ELFOSABI_ARM 97 /* ARM */ #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ -#define ELFOSABI_NONE ELFOSABI_SYSV -#define ELFOSABI_AIX ELFOSABI_MONTEREY - -/* e_type */ -#define ET_NONE 0 /* No file type */ -#define ET_REL 1 /* Relocatable file */ -#define ET_EXEC 2 /* Executable file */ -#define ET_DYN 3 /* Shared object file */ -#define ET_CORE 4 /* Core file */ -#define ET_NUM 5 - -#define ET_LOOS 0xfe00 /* Operating system specific range */ -#define ET_HIOS 0xfeff -#define ET_LOPROC 0xff00 /* Processor-specific range */ -#define ET_HIPROC 0xffff - -/* e_machine */ -#define EM_NONE 0 /* No machine */ -#define EM_M32 1 /* AT&T WE 32100 */ -#define EM_SPARC 2 /* SPARC */ -#define EM_386 3 /* Intel 80386 */ -#define EM_68K 4 /* Motorola 68000 */ -#define EM_88K 5 /* Motorola 88000 */ -#define EM_486 6 /* Intel 80486 */ -#define EM_860 7 /* Intel 80860 */ -#define EM_MIPS 8 /* MIPS I Architecture */ -#define EM_S370 9 /* Amdahl UTS on System/370 */ -#define EM_MIPS_RS3_LE 10 /* MIPS RS3000 Little-endian */ - /* 11-14 - Reserved */ -#define EM_RS6000 11 /* IBM RS/6000 XXX reserved */ -#define EM_PARISC 15 /* Hewlett-Packard PA-RISC */ -#define EM_NCUBE 16 /* NCube XXX reserved */ -#define EM_VPP500 17 /* Fujitsu VPP500 */ -#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ -#define EM_960 19 /* Intel 80960 */ -#define EM_PPC 20 /* PowerPC */ -#define EM_PPC64 21 /* 64-bit PowerPC */ - /* 22-35 - Reserved */ -#define EM_S390 22 /* System/390 XXX reserved */ -#define EM_V800 36 /* NEC V800 */ -#define EM_FR20 37 /* Fujitsu FR20 */ -#define EM_RH32 38 /* TRW RH-32 */ -#define EM_RCE 39 /* Motorola RCE */ -#define EM_ARM 40 /* Advanced RISC Machines ARM */ -#define EM_ALPHA 41 /* DIGITAL Alpha */ -#define EM_SH 42 /* Hitachi Super-H */ -#define EM_SPARCV9 43 /* SPARC Version 9 */ -#define EM_TRICORE 44 /* Siemens Tricore */ -#define EM_ARC 45 /* Argonaut RISC Core */ -#define EM_H8_300 46 /* Hitachi H8/300 */ -#define EM_H8_300H 47 /* Hitachi H8/300H */ -#define EM_H8S 48 /* Hitachi H8S */ -#define EM_H8_500 49 /* Hitachi H8/500 */ -#define EM_IA_64 50 /* Intel Merced Processor */ -#define EM_MIPS_X 51 /* Stanford MIPS-X */ -#define EM_COLDFIRE 52 /* Motorola Coldfire */ -#define EM_68HC12 53 /* Motorola MC68HC12 */ -#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */ -#define EM_PCP 55 /* Siemens PCP */ -#define EM_NCPU 56 /* Sony nCPU embedded RISC processor */ -#define EM_NDR1 57 /* Denso NDR1 microprocessor */ -#define EM_STARCORE 58 /* Motorola Star*Core processor */ -#define EM_ME16 59 /* Toyota ME16 processor */ -#define EM_ST100 60 /* STMicroelectronics ST100 processor */ -#define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded family processor */ -#define EM_X86_64 62 /* AMD x86-64 architecture */ -#define EM_PDSP 63 /* Sony DSP Processor */ -#define EM_PDP10 64 /* Digital Equipment Corp. PDP-10 */ -#define EM_PDP11 65 /* Digital Equipment Corp. PDP-11 */ -#define EM_FX66 66 /* Siemens FX66 microcontroller */ -#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 bit microcontroller */ -#define EM_ST7 68 /* STMicroelectronics ST7 8-bit microcontroller */ -#define EM_68HC16 69 /* Motorola MC68HC16 Microcontroller */ -#define EM_68HC11 70 /* Motorola MC68HC11 Microcontroller */ -#define EM_68HC08 71 /* Motorola MC68HC08 Microcontroller */ -#define EM_68HC05 72 /* Motorola MC68HC05 Microcontroller */ -#define EM_SVX 73 /* Silicon Graphics SVx */ -#define EM_ST19 74 /* STMicroelectronics ST19 8-bit CPU */ -#define EM_VAX 75 /* Digital VAX */ -#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ -#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded CPU */ -#define EM_FIREPATH 78 /* Element 14 64-bit DSP processor */ -#define EM_ZSP 79 /* LSI Logic's 16-bit DSP processor */ -#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ -#define EM_HUANY 81 /* Harvard's machine-independent format */ -#define EM_PRISM 82 /* SiTera Prism */ -#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ -#define EM_FR30 84 /* Fujitsu FR30 */ -#define EM_D10V 85 /* Mitsubishi D10V */ -#define EM_D30V 86 /* Mitsubishi D30V */ -#define EM_V850 87 /* NEC v850 */ -#define EM_M32R 88 /* Mitsubishi M32R */ -#define EM_MN10300 89 /* Matsushita MN10300 */ -#define EM_MN10200 90 /* Matsushita MN10200 */ -#define EM_PJ 91 /* picoJava */ -#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ -#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ -#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ -#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */ -#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Processor */ -#define EM_NS32K 97 /* National Semiconductor 32000 series */ -#define EM_TPC 98 /* Tenor Network TPC processor */ -#define EM_SNP1K 99 /* Trebia SNP 1000 processor */ -#define EM_ST200 100 /* STMicroelectronics ST200 microcontroller */ -#define EM_IP2K 101 /* Ubicom IP2xxx microcontroller family */ -#define EM_MAX 102 /* MAX processor */ -#define EM_CR 103 /* National Semiconductor CompactRISC micorprocessor */ -#define EM_F2MC16 104 /* Fujitsu F2MC16 */ -#define EM_MSP430 105 /* Texas Instruments MSP430 */ -#define EM_BLACKFIN 106 /* Analog Devices Blackfin DSP */ -#define EM_SE_C33 107 /* Seiko Epson S1C33 family */ -#define EM_SEP 108 /* Sharp embedded microprocessor */ -#define EM_ARCA 109 /* Arca RISC microprocessor */ -#define EM_UNICORE 110 /* UNICORE from PKU-Unity Ltd. and MPRC Peking University */ -#define EM_AARCH64 183 /* AArch64 64-bit ARM microprocessor */ - -/* Unofficial machine types follow */ -#define EM_AVR32 6317 /* used by NetBSD/avr32 */ -#define EM_ALPHA_EXP 36902 /* used by NetBSD/alpha; obsolete */ -#define EM_NUM 36903 - -/* - * Program Header - */ -typedef struct { - Elf32_Word p_type; /* entry type */ - Elf32_Off p_offset; /* offset */ - Elf32_Addr p_vaddr; /* virtual address */ - Elf32_Addr p_paddr; /* physical address */ - Elf32_Word p_filesz; /* file size */ - Elf32_Word p_memsz; /* memory size */ - Elf32_Word p_flags; /* flags */ - Elf32_Word p_align; /* memory & file alignment */ -} Elf32_Phdr; +/* e_ident */ +#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ + (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ + (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ + (ehdr).e_ident[EI_MAG3] == ELFMAG3) + +/* ELF Header */ +typedef struct elfhdr { + unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ + Elf32_Half e_type; /* object file type */ + Elf32_Half e_machine; /* machine */ + Elf32_Word e_version; /* object file version */ + Elf32_Addr e_entry; /* virtual entry point */ + Elf32_Off e_phoff; /* program header table offset */ + Elf32_Off e_shoff; /* section header table offset */ + Elf32_Word e_flags; /* processor-specific flags */ + Elf32_Half e_ehsize; /* ELF header size */ + Elf32_Half e_phentsize; /* program header entry size */ + Elf32_Half e_phnum; /* number of program header entries */ + Elf32_Half e_shentsize; /* section header entry size */ + Elf32_Half e_shnum; /* number of section header entries */ + Elf32_Half e_shstrndx; /* section header table's "section + header string table" entry offset */ +} Elf32_Ehdr; typedef struct { - Elf64_Word p_type; /* entry type */ - Elf64_Word p_flags; /* flags */ - Elf64_Off p_offset; /* offset */ - Elf64_Addr p_vaddr; /* virtual address */ - Elf64_Addr p_paddr; /* physical address */ - Elf64_Xword p_filesz; /* file size */ - Elf64_Xword p_memsz; /* memory size */ - Elf64_Xword p_align; /* memory & file alignment */ -} Elf64_Phdr; - -/* p_type */ -#define PT_NULL 0 /* Program header table entry unused */ -#define PT_LOAD 1 /* Loadable program segment */ -#define PT_DYNAMIC 2 /* Dynamic linking information */ -#define PT_INTERP 3 /* Program interpreter */ -#define PT_NOTE 4 /* Auxiliary information */ -#define PT_SHLIB 5 /* Reserved, unspecified semantics */ -#define PT_PHDR 6 /* Entry for header table itself */ -#define PT_TLS 7 /* TLS initialisation image */ -#define PT_NUM 8 - -#define PT_LOOS 0x60000000 /* OS-specific range */ - -/* GNU-specific */ -#define PT_GNU_EH_FRAME 0x6474e550 /* EH frame segment */ -#define PT_GNU_STACK 0x6474e551 /* Indicate executable stack */ -#define PT_GNU_RELRO 0x6474e552 /* Make read-only after relocation */ - -#define PT_HIOS 0x6fffffff -#define PT_LOPROC 0x70000000 /* Processor-specific range */ -#define PT_HIPROC 0x7fffffff - -#define PT_MIPS_REGINFO 0x70000000 - -/* p_flags */ -#define PF_R 0x4 /* Segment is readable */ -#define PF_W 0x2 /* Segment is writable */ -#define PF_X 0x1 /* Segment is executable */ - -#define PF_MASKOS 0x0ff00000 /* Operating system specific values */ -#define PF_MASKPROC 0xf0000000 /* Processor-specific values */ + unsigned char e_ident[EI_NIDENT]; /* Id bytes */ + Elf64_Quarter e_type; /* file type */ + Elf64_Quarter e_machine; /* machine type */ + Elf64_Half e_version; /* version number */ + Elf64_Addr e_entry; /* entry point */ + Elf64_Off e_phoff; /* Program hdr offset */ + Elf64_Off e_shoff; /* Section hdr offset */ + Elf64_Half e_flags; /* Processor flags */ + Elf64_Quarter e_ehsize; /* sizeof ehdr */ + Elf64_Quarter e_phentsize; /* Program header entry size */ + Elf64_Quarter e_phnum; /* Number of program headers */ + Elf64_Quarter e_shentsize; /* Section header entry size */ + Elf64_Quarter e_shnum; /* Number of section headers */ + Elf64_Quarter e_shstrndx; /* String table index */ +} Elf64_Ehdr; -/* Extended program header index. */ -#define PN_XNUM 0xffff +/* e_type */ +#define ET_NONE 0 /* No file type */ +#define ET_REL 1 /* relocatable file */ +#define ET_EXEC 2 /* executable file */ +#define ET_DYN 3 /* shared object file */ +#define ET_CORE 4 /* core file */ +#define ET_NUM 5 /* number of types */ +#define ET_LOPROC 0xff00 /* reserved range for processor */ +#define ET_HIPROC 0xffff /* specific e_type */ -/* - * Section Headers +/* e_machine */ +#define EM_NONE 0 /* No Machine */ +#define EM_M32 1 /* AT&T WE 32100 */ +#define EM_SPARC 2 /* SPARC */ +#define EM_386 3 /* Intel 80386 */ +#define EM_68K 4 /* Motorola 68000 */ +#define EM_88K 5 /* Motorola 88000 */ +#define EM_486 6 /* Intel 80486 - unused? */ +#define EM_860 7 /* Intel 80860 */ +#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ +/* + * Don't know if EM_MIPS_RS4_BE, + * EM_SPARC64, EM_PARISC, + * or EM_PPC are ABI compliant */ +#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ +#define EM_SPARC64 11 /* SPARC v9 64-bit unoffical */ +#define EM_PARISC 15 /* HPPA */ +#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ +#define EM_PPC 20 /* PowerPC */ +#define EM_ARM 40 /* Advanced RISC Machines ARM */ +#define EM_ALPHA 41 /* DEC ALPHA */ +#define EM_SPARCV9 43 /* SPARC version 9 */ +#define EM_ALPHA_EXP 0x9026 /* DEC ALPHA */ +#define EM_AMD64 62 /* AMD64 architecture */ +#define EM_VAX 75 /* DEC VAX */ +#define EM_NUM 15 /* number of machine types */ + +/* Version */ +#define EV_NONE 0 /* Invalid */ +#define EV_CURRENT 1 /* Current */ +#define EV_NUM 2 /* number of versions */ + +/* Section Header */ typedef struct { - Elf32_Word sh_name; /* section name (.shstrtab index) */ - Elf32_Word sh_type; /* section type */ - Elf32_Word sh_flags; /* section flags */ - Elf32_Addr sh_addr; /* virtual address */ + Elf32_Word sh_name; /* name - index into section header + string table section */ + Elf32_Word sh_type; /* type */ + Elf32_Word sh_flags; /* flags */ + Elf32_Addr sh_addr; /* address */ Elf32_Off sh_offset; /* file offset */ Elf32_Word sh_size; /* section size */ - Elf32_Word sh_link; /* link to another */ - Elf32_Word sh_info; /* misc info */ - Elf32_Word sh_addralign; /* memory alignment */ - Elf32_Word sh_entsize; /* table entry size */ + Elf32_Word sh_link; /* section header table index link */ + Elf32_Word sh_info; /* extra information */ + Elf32_Word sh_addralign; /* address alignment */ + Elf32_Word sh_entsize; /* section entry size */ } Elf32_Shdr; typedef struct { - Elf64_Word sh_name; /* section name (.shstrtab index) */ - Elf64_Word sh_type; /* section type */ + Elf64_Half sh_name; /* section name */ + Elf64_Half sh_type; /* section type */ Elf64_Xword sh_flags; /* section flags */ Elf64_Addr sh_addr; /* virtual address */ Elf64_Off sh_offset; /* file offset */ Elf64_Xword sh_size; /* section size */ - Elf64_Word sh_link; /* link to another */ - Elf64_Word sh_info; /* misc info */ + Elf64_Half sh_link; /* link to another */ + Elf64_Half sh_info; /* misc info */ Elf64_Xword sh_addralign; /* memory alignment */ Elf64_Xword sh_entsize; /* table entry size */ } Elf64_Shdr; +/* Special Section Indexes */ +#define SHN_UNDEF 0 /* undefined */ +#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ +#define SHN_LOPROC 0xff00 /* reserved range for processor */ +#define SHN_HIPROC 0xff1f /* specific section indexes */ +#define SHN_ABS 0xfff1 /* absolute value */ +#define SHN_COMMON 0xfff2 /* common symbol */ +#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ + /* sh_type */ -#define SHT_NULL 0 /* Section header table entry unused */ -#define SHT_PROGBITS 1 /* Program information */ -#define SHT_SYMTAB 2 /* Symbol table */ -#define SHT_STRTAB 3 /* String table */ -#define SHT_RELA 4 /* Relocation information w/ addend */ -#define SHT_HASH 5 /* Symbol hash table */ -#define SHT_DYNAMIC 6 /* Dynamic linking information */ -#define SHT_NOTE 7 /* Auxiliary information */ -#define SHT_NOBITS 8 /* No space allocated in file image */ -#define SHT_REL 9 /* Relocation information w/o addend */ -#define SHT_SHLIB 10 /* Reserved, unspecified semantics */ -#define SHT_DYNSYM 11 /* Symbol table for dynamic linker */ -#define SHT_INIT_ARRAY 14 /* Initialization function pointers */ -#define SHT_FINI_ARRAY 15 /* Termination function pointers */ -#define SHT_PREINIT_ARRAY 16 /* Pre-initialization function ptrs */ -#define SHT_GROUP 17 /* Section group */ -#define SHT_SYMTAB_SHNDX 18 /* Section indexes (see SHN_XINDEX) */ -#define SHT_NUM 19 - -#define SHT_LOOS 0x60000000 /* Operating system specific range */ -#define SHT_GNU_HASH 0x6ffffff6 /* GNU style symbol hash table */ -#define SHT_SUNW_move 0x6ffffffa -#define SHT_SUNW_syminfo 0x6ffffffc -#define SHT_SUNW_verdef 0x6ffffffd /* Versions defined by file */ -#define SHT_GNU_verdef SHT_SUNW_verdef -#define SHT_SUNW_verneed 0x6ffffffe /* Versions needed by file */ -#define SHT_GNU_verneed SHT_SUNW_verneed -#define SHT_SUNW_versym 0x6fffffff /* Symbol versions */ -#define SHT_GNU_versym SHT_SUNW_versym -#define SHT_HIOS 0x6fffffff -#define SHT_LOPROC 0x70000000 /* Processor-specific range */ -#define SHT_AMD64_UNWIND 0x70000001 /* unwind information */ -#define SHT_ARM_EXIDX 0x70000001 /* exception index table */ -#define SHT_ARM_PREEMPTMAP 0x70000002 /* BPABI DLL dynamic linking - * pre-emption map */ -#define SHT_ARM_ATTRIBUTES 0x70000003 /* Object file compatibility - * attributes */ -#define SHT_ARM_DEBUGOVERLAY 0x70000004 /* See DBGOVL for details */ -#define SHT_ARM_OVERLAYSECTION 0x70000005 -#define SHT_HIPROC 0x7fffffff -#define SHT_LOUSER 0x80000000 /* Application-specific range */ -#define SHT_HIUSER 0xffffffff - -/* sh_flags */ -#define SHF_WRITE 0x00000001 /* Contains writable data */ -#define SHF_ALLOC 0x00000002 /* Occupies memory */ -#define SHF_EXECINSTR 0x00000004 /* Contains executable insns */ -#define SHF_MERGE 0x00000010 /* Might be merged */ -#define SHF_STRINGS 0x00000020 /* Contains nul terminated strings */ -#define SHF_INFO_LINK 0x00000040 /* "sh_info" contains SHT index */ -#define SHF_LINK_ORDER 0x00000080 /* Preserve order after combining */ -#define SHF_OS_NONCONFORMING 0x00000100 /* OS specific handling required */ -#define SHF_GROUP 0x00000200 /* Is member of a group */ -#define SHF_TLS 0x00000400 /* Holds thread-local data */ -#define SHF_MASKOS 0x0ff00000 /* Operating system specific values */ -#define SHF_MASKPROC 0xf0000000 /* Processor-specific values */ -#define SHF_ORDERED 0x40000000 /* Ordering requirement (Solaris) */ -#define SHF_EXCLUDE 0x80000000 /* Excluded unless unles ref/alloc - (Solaris).*/ -/* - * Symbol Table - */ -typedef struct { - Elf32_Word st_name; /* Symbol name (.strtab index) */ - Elf32_Word st_value; /* value of symbol */ - Elf32_Word st_size; /* size of symbol */ - Elf_Byte st_info; /* type / binding attrs */ - Elf_Byte st_other; /* unused */ - Elf32_Half st_shndx; /* section index of symbol */ +#define SHT_NULL 0 /* inactive */ +#define SHT_PROGBITS 1 /* program defined information */ +#define SHT_SYMTAB 2 /* symbol table section */ +#define SHT_STRTAB 3 /* string table section */ +#define SHT_RELA 4 /* relocation section with addends*/ +#define SHT_HASH 5 /* symbol hash table section */ +#define SHT_DYNAMIC 6 /* dynamic section */ +#define SHT_NOTE 7 /* note section */ +#define SHT_NOBITS 8 /* no space section */ +#define SHT_REL 9 /* relation section without addends */ +#define SHT_SHLIB 10 /* reserved - purpose unknown */ +#define SHT_DYNSYM 11 /* dynamic symbol table section */ +#define SHT_NUM 12 /* number of section types */ +#define SHT_LOPROC 0x70000000 /* reserved range for processor */ +#define SHT_HIPROC 0x7fffffff /* specific section header types */ +#define SHT_LOUSER 0x80000000 /* reserved range for application */ +#define SHT_HIUSER 0xffffffff /* specific indexes */ + +/* Section names */ +#define ELF_BSS ".bss" /* uninitialized data */ +#define ELF_DATA ".data" /* initialized data */ +#define ELF_DEBUG ".debug" /* debug */ +#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ +#define ELF_DYNSTR ".dynstr" /* dynamic string table */ +#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ +#define ELF_FINI ".fini" /* termination code */ +#define ELF_GOT ".got" /* global offset table */ +#define ELF_HASH ".hash" /* symbol hash table */ +#define ELF_INIT ".init" /* initialization code */ +#define ELF_REL_DATA ".rel.data" /* relocation data */ +#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ +#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ +#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ +#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ +#define ELF_REL_TEXT ".rel.text" /* relocation code */ +#define ELF_RODATA ".rodata" /* read-only data */ +#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ +#define ELF_STRTAB ".strtab" /* string table */ +#define ELF_SYMTAB ".symtab" /* symbol table */ +#define ELF_TEXT ".text" /* code */ + + +/* Section Attribute Flags - sh_flags */ +#define SHF_WRITE 0x1 /* Writable */ +#define SHF_ALLOC 0x2 /* occupies memory */ +#define SHF_EXECINSTR 0x4 /* executable */ +#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific section attributes */ + +/* Symbol Table Entry */ +typedef struct elf32_sym { + Elf32_Word st_name; /* name - index into string table */ + Elf32_Addr st_value; /* symbol value */ + Elf32_Word st_size; /* symbol size */ + unsigned char st_info; /* type and binding */ + unsigned char st_other; /* 0 - no defined meaning */ + Elf32_Half st_shndx; /* section header index */ } Elf32_Sym; typedef struct { - Elf64_Word st_name; /* Symbol name (.strtab index) */ + Elf64_Half st_name; /* Symbol name index in str table */ Elf_Byte st_info; /* type / binding attrs */ Elf_Byte st_other; /* unused */ - Elf64_Half st_shndx; /* section index of symbol */ - Elf64_Addr st_value; /* value of symbol */ + Elf64_Quarter st_shndx; /* section index of symbol */ + Elf64_Xword st_value; /* value of symbol */ Elf64_Xword st_size; /* size of symbol */ } Elf64_Sym; -/* Symbol Table index of the undefined symbol */ -#define ELF_SYM_UNDEFINED 0 - -#define STN_UNDEF 0 /* undefined index */ - -/* st_info: Symbol Bindings */ -#define STB_LOCAL 0 /* local symbol */ -#define STB_GLOBAL 1 /* global symbol */ -#define STB_WEAK 2 /* weakly defined global symbol */ -#define STB_NUM 3 - -#define STB_LOOS 10 /* Operating system specific range */ -#define STB_HIOS 12 -#define STB_LOPROC 13 /* Processor-specific range */ -#define STB_HIPROC 15 - -/* st_info: Symbol Types */ -#define STT_NOTYPE 0 /* Type not specified */ -#define STT_OBJECT 1 /* Associated with a data object */ -#define STT_FUNC 2 /* Associated with a function */ -#define STT_SECTION 3 /* Associated with a section */ -#define STT_FILE 4 /* Associated with a file name */ -#define STT_COMMON 5 /* Uninitialised common block */ -#define STT_TLS 6 /* Thread local data object */ -#define STT_NUM 7 - -#define STT_LOOS 10 /* Operating system specific range */ -#define STT_HIOS 12 -#define STT_LOPROC 13 /* Processor-specific range */ -#define STT_HIPROC 15 - -/* st_other: Visibility Types */ -#define STV_DEFAULT 0 /* use binding type */ -#define STV_INTERNAL 1 /* not referenced from outside */ -#define STV_HIDDEN 2 /* not visible, may be used via ptr */ -#define STV_PROTECTED 3 /* visible, not preemptible */ -#define STV_EXPORTED 4 -#define STV_SINGLETON 5 -#define STV_ELIMINATE 6 - -/* st_info/st_other utility macros */ -#define ELF_ST_BIND(info) ((uint32_t)(info) >> 4) -#define ELF_ST_TYPE(info) ((uint32_t)(info) & 0xf) -#define ELF_ST_INFO(bind,type) ((Elf_Byte)(((bind) << 4) | \ - ((type) & 0xf))) -#define ELF_ST_VISIBILITY(other) ((uint32_t)(other) & 3) - -/* - * Special section indexes - */ -#define SHN_UNDEF 0 /* Undefined section */ - -#define SHN_LORESERVE 0xff00 /* Reserved range */ -#define SHN_ABS 0xfff1 /* Absolute symbols */ -#define SHN_COMMON 0xfff2 /* Common symbols */ -#define SHN_XINDEX 0xffff /* Escape -- index stored elsewhere */ -#define SHN_HIRESERVE 0xffff - -#define SHN_LOPROC 0xff00 /* Processor-specific range */ -#define SHN_HIPROC 0xff1f -#define SHN_LOOS 0xff20 /* Operating system specific range */ -#define SHN_HIOS 0xff3f - -#define SHN_MIPS_ACOMMON 0xff00 -#define SHN_MIPS_TEXT 0xff01 -#define SHN_MIPS_DATA 0xff02 -#define SHN_MIPS_SCOMMON 0xff03 - -/* - * Relocation Entries - */ +/* Symbol table index */ +#define STN_UNDEF 0 /* undefined */ + +/* Extract symbol info - st_info */ +#define ELF32_ST_BIND(x) ((x) >> 4) +#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) + +#define ELF64_ST_BIND(x) ((x) >> 4) +#define ELF64_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF64_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) + +/* Symbol Binding - ELF32_ST_BIND - st_info */ +#define STB_LOCAL 0 /* Local symbol */ +#define STB_GLOBAL 1 /* Global symbol */ +#define STB_WEAK 2 /* like global - lower precedence */ +#define STB_NUM 3 /* number of symbol bindings */ +#define STB_LOPROC 13 /* reserved range for processor */ +#define STB_HIPROC 15 /* specific symbol bindings */ + +/* Symbol type - ELF32_ST_TYPE - st_info */ +#define STT_NOTYPE 0 /* not specified */ +#define STT_OBJECT 1 /* data object */ +#define STT_FUNC 2 /* function */ +#define STT_SECTION 3 /* section */ +#define STT_FILE 4 /* file */ +#define STT_NUM 5 /* number of symbol types */ +#define STT_LOPROC 13 /* reserved range for processor */ +#define STT_HIPROC 15 /* specific symbol types */ + +/* Relocation entry with implicit addend */ typedef struct { - Elf32_Word r_offset; /* where to do it */ - Elf32_Word r_info; /* index & type of relocation */ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ } Elf32_Rel; +/* Relocation entry with explicit addend */ typedef struct { - Elf32_Word r_offset; /* where to do it */ - Elf32_Word r_info; /* index & type of relocation */ - Elf32_Sword r_addend; /* adjustment value */ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ + Elf32_Sword r_addend; } Elf32_Rela; -/* r_info utility macros */ -#define ELF32_R_SYM(info) ((info) >> 8) -#define ELF32_R_TYPE(info) ((info) & 0xff) -#define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type)) +/* Extract relocation info - r_info */ +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char) (i)) +#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) typedef struct { - Elf64_Addr r_offset; /* where to do it */ + Elf64_Xword r_offset; /* where to do it */ Elf64_Xword r_info; /* index & type of relocation */ } Elf64_Rel; typedef struct { - Elf64_Addr r_offset; /* where to do it */ + Elf64_Xword r_offset; /* where to do it */ Elf64_Xword r_info; /* index & type of relocation */ Elf64_Sxword r_addend; /* adjustment value */ } Elf64_Rela; -/* r_info utility macros */ -#if defined(__mips__) -#if defined(__MIPSEL__) -#define ELF64_R_SYM(info) (((info) >> 0) & 0xffffffff) -#define ELF64_R_SSYM(info) (((info) >> 32) & 0xff) -#define ELF64_R_TYPE3(info) (((info) >> 40) & 0xff) -#define ELF64_R_TYPE2(info) (((info) >> 48) & 0xff) -#define ELF64_R_TYPE(info) (((info) >> 56) & 0xff) -#define ELF64_R_INFO(sym,ssym,type,type2,type3) \ - (((type) << 56) + ((type2) << 48) + ((type3) << 40) + ((ssym) << 32) + (sym)) -#else -#define ELF64_R_SYM(info) (((info) >> 32) & 0xffffffff) -#define ELF64_R_SSYM(info) (((info) >> 24) & 0xff) -#define ELF64_R_TYPE3(info) (((info) >> 16) & 0xff) -#define ELF64_R_TYPE2(info) (((info) >> 8) & 0xff) -#define ELF64_R_TYPE(info) (((info) >> 0) & 0xff) -#define ELF64_R_INFO(sym,ssym,type,type2,type3) \ - (((sym) << 32) + ((ssym) << 24) + ((type3) << 16) + ((type2) << 8) + (type)) -#endif -#else -#define ELF64_R_SYM(info) ((info) >> 32) -#define ELF64_R_TYPE(info) ((info) & 0xffffffff) -#define ELF64_R_INFO(sym,type) (((sym) << 32) + (type)) -#endif - -/* - * Move entries - */ -typedef struct { - Elf32_Lword m_value; /* symbol value */ - Elf32_Word m_info; /* size + index */ - Elf32_Word m_poffset; /* symbol offset */ - Elf32_Half m_repeat; /* repeat count */ - Elf32_Half m_stride; /* stride info */ -} Elf32_Move; - -#define ELF32_M_SYM(info) ((info) >> 8) -#define ELF32_M_SIZE(info) ((info) & 0xff) -#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) +#define ELF64_R_SYM(info) ((info) >> 32) +#define ELF64_R_TYPE(info) ((info) & 0xFFFFFFFF) +#define ELF64_R_INFO(s,t) (((s) << 32) + (__uint32_t)(t)) +/* Program Header */ typedef struct { - Elf64_Lword m_value; /* symbol value */ - Elf64_Xword m_info; /* size + index */ - Elf64_Xword m_poffset; /* symbol offset */ - Elf64_Word m_repeat; /* repeat count */ - Elf64_Word m_stride; /* stride info */ -} Elf64_Move; - -#define ELF64_M_SYM(info) ((info) >> 8) -#define ELF64_M_SIZE(info) ((info) & 0xff) -#define ELF64_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) - -/* - * Hardware/software capabilities entry - */ -typedef struct { - Elf32_Word c_tag; /* entry tag value */ - union { - Elf32_Addr c_ptr; - Elf32_Word c_val; - } c_un; -} Elf32_Cap; + Elf32_Word p_type; /* segment type */ + Elf32_Off p_offset; /* segment offset */ + Elf32_Addr p_vaddr; /* virtual address of segment */ + Elf32_Addr p_paddr; /* physical address - ignored? */ + Elf32_Word p_filesz; /* number of bytes in file for seg. */ + Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ + Elf32_Word p_flags; /* flags */ + Elf32_Word p_align; /* memory alignment */ +} Elf32_Phdr; typedef struct { - Elf64_Xword c_tag; /* entry tag value */ - union { - Elf64_Addr c_ptr; - Elf64_Xword c_val; - } c_un; -} Elf64_Cap; + Elf64_Half p_type; /* entry type */ + Elf64_Half p_flags; /* flags */ + Elf64_Off p_offset; /* offset */ + Elf64_Addr p_vaddr; /* virtual address */ + Elf64_Addr p_paddr; /* physical address */ + Elf64_Xword p_filesz; /* file size */ + Elf64_Xword p_memsz; /* memory size */ + Elf64_Xword p_align; /* memory & file alignment */ +} Elf64_Phdr; -/* - * Dynamic Section structure array - */ +/* Segment types - p_type */ +#define PT_NULL 0 /* unused */ +#define PT_LOAD 1 /* loadable segment */ +#define PT_DYNAMIC 2 /* dynamic linking section */ +#define PT_INTERP 3 /* the RTLD */ +#define PT_NOTE 4 /* auxiliary information */ +#define PT_SHLIB 5 /* reserved - purpose undefined */ +#define PT_PHDR 6 /* program header */ +#define PT_NUM 7 /* Number of segment types */ +#define PT_LOOS 0x60000000 /* reserved range for OS */ +#define PT_HIOS 0x6fffffff /* specific segment types */ +#define PT_LOPROC 0x70000000 /* reserved range for processor */ +#define PT_HIPROC 0x7fffffff /* specific segment types */ + +/* Segment flags - p_flags */ +#define PF_X 0x1 /* Executable */ +#define PF_W 0x2 /* Writable */ +#define PF_R 0x4 /* Readable */ +#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific segment flags */ + +/* Dynamic structure */ typedef struct { - Elf32_Word d_tag; /* entry tag value */ + Elf32_Sword d_tag; /* controls meaning of d_val */ union { - Elf32_Addr d_ptr; - Elf32_Word d_val; + Elf32_Word d_val; /* Multiple meanings - see d_tag */ + Elf32_Addr d_ptr; /* program virtual address */ } d_un; } Elf32_Dyn; typedef struct { - Elf64_Xword d_tag; /* entry tag value */ + Elf64_Xword d_tag; /* controls meaning of d_val */ union { Elf64_Addr d_ptr; Elf64_Xword d_val; } d_un; } Elf64_Dyn; -/* d_tag */ -#define DT_NULL 0 /* Marks end of dynamic array */ -#define DT_NEEDED 1 /* Name of needed library (DT_STRTAB offset) */ -#define DT_PLTRELSZ 2 /* Size, in bytes, of relocations in PLT */ -#define DT_PLTGOT 3 /* Address of PLT and/or GOT */ -#define DT_HASH 4 /* Address of symbol hash table */ -#define DT_STRTAB 5 /* Address of string table */ -#define DT_SYMTAB 6 /* Address of symbol table */ -#define DT_RELA 7 /* Address of Rela relocation table */ -#define DT_RELASZ 8 /* Size, in bytes, of DT_RELA table */ -#define DT_RELAENT 9 /* Size, in bytes, of one DT_RELA entry */ -#define DT_STRSZ 10 /* Size, in bytes, of DT_STRTAB table */ -#define DT_SYMENT 11 /* Size, in bytes, of one DT_SYMTAB entry */ -#define DT_INIT 12 /* Address of initialization function */ -#define DT_FINI 13 /* Address of termination function */ -#define DT_SONAME 14 /* Shared object name (DT_STRTAB offset) */ -#define DT_RPATH 15 /* Library search path (DT_STRTAB offset) */ -#define DT_SYMBOLIC 16 /* Start symbol search within local object */ -#define DT_REL 17 /* Address of Rel relocation table */ -#define DT_RELSZ 18 /* Size, in bytes, of DT_REL table */ -#define DT_RELENT 19 /* Size, in bytes, of one DT_REL entry */ -#define DT_PLTREL 20 /* Type of PLT relocation entries */ -#define DT_DEBUG 21 /* Used for debugging; unspecified */ -#define DT_TEXTREL 22 /* Relocations might modify non-writable seg */ -#define DT_JMPREL 23 /* Address of relocations associated with PLT */ -#define DT_BIND_NOW 24 /* Process all relocations at load-time */ -#define DT_INIT_ARRAY 25 /* Address of initialization function array */ -#define DT_FINI_ARRAY 26 /* Size, in bytes, of DT_INIT_ARRAY array */ -#define DT_INIT_ARRAYSZ 27 /* Address of termination function array */ -#define DT_FINI_ARRAYSZ 28 /* Size, in bytes, of DT_FINI_ARRAY array*/ -#define DT_RUNPATH 29 /* overrides DT_RPATH */ -#define DT_FLAGS 30 /* Encodes ORIGIN, SYMBOLIC, TEXTREL, BIND_NOW, STATIC_TLS */ -#define DT_ENCODING 31 /* ??? */ -#define DT_PREINIT_ARRAY 32 /* Address of pre-init function array */ -#define DT_PREINIT_ARRAYSZ 33 /* Size, in bytes, of DT_PREINIT_ARRAY array */ -#define DT_NUM 34 - -#define DT_LOOS 0x60000000 /* Operating system specific range */ -#define DT_VERSYM 0x6ffffff0 /* Symbol versions */ -#define DT_FLAGS_1 0x6ffffffb /* ELF dynamic flags */ -#define DT_VERDEF 0x6ffffffc /* Versions defined by file */ -#define DT_VERDEFNUM 0x6ffffffd /* Number of versions defined by file */ -#define DT_VERNEED 0x6ffffffe /* Versions needed by file */ -#define DT_VERNEEDNUM 0x6fffffff /* Number of versions needed by file */ -#define DT_HIOS 0x6fffffff -#define DT_LOPROC 0x70000000 /* Processor-specific range */ -#define DT_HIPROC 0x7fffffff - -/* Flag values for DT_FLAGS */ -#define DF_ORIGIN 0x00000001 /* uses $ORIGIN */ -#define DF_SYMBOLIC 0x00000002 /* */ -#define DF_TEXTREL 0x00000004 /* */ -#define DF_BIND_NOW 0x00000008 /* */ -#define DF_STATICT_LS 0x00000010 /* */ - -/* Flag values for DT_FLAGS_1 (incomplete) */ -#define DF_1_BIND_NOW 0x00000001 /* Same as DF_BIND_NOW */ -#define DF_1_NODELETE 0x00000008 /* Set the RTLD_NODELETE for object */ -#define DF_1_INITFIRST 0x00000020 /* Object's init/fini take priority */ -#define DF_1_NOOPEN 0x00000040 /* Do not allow loading on dlopen() */ +/* Dynamic Array Tags - d_tag */ +#define DT_NULL 0 /* marks end of _DYNAMIC array */ +#define DT_NEEDED 1 /* string table offset of needed lib */ +#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ +#define DT_PLTGOT 3 /* address PLT/GOT */ +#define DT_HASH 4 /* address of symbol hash table */ +#define DT_STRTAB 5 /* address of string table */ +#define DT_SYMTAB 6 /* address of symbol table */ +#define DT_RELA 7 /* address of relocation table */ +#define DT_RELASZ 8 /* size of relocation table */ +#define DT_RELAENT 9 /* size of relocation entry */ +#define DT_STRSZ 10 /* size of string table */ +#define DT_SYMENT 11 /* size of symbol table entry */ +#define DT_INIT 12 /* address of initialization func. */ +#define DT_FINI 13 /* address of termination function */ +#define DT_SONAME 14 /* string table offset of shared obj */ +#define DT_RPATH 15 /* string table offset of library + search path */ +#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ +#define DT_REL 17 /* address of rel. tbl. w addends */ +#define DT_RELSZ 18 /* size of DT_REL relocation table */ +#define DT_RELENT 19 /* size of DT_REL relocation entry */ +#define DT_PLTREL 20 /* PLT referenced relocation entry */ +#define DT_DEBUG 21 /* bugger */ +#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ +#define DT_JMPREL 23 /* add. of PLT's relocation entries */ +#define DT_BIND_NOW 24 /* Bind now regardless of env setting */ +#define DT_NUM 25 /* Number used. */ +#define DT_LOPROC 0x70000000 /* reserved range for processor */ +#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ + +/* Standard ELF hashing function */ +unsigned int elf_hash(const unsigned char *name); /* - * Auxiliary Vectors + * Note Definitions */ typedef struct { - Elf32_Word a_type; /* 32-bit id */ - Elf32_Word a_v; /* 32-bit id */ -} Aux32Info; + Elf32_Word namesz; + Elf32_Word descsz; + Elf32_Word type; +} Elf32_Note; typedef struct { - Elf64_Word a_type; /* 32-bit id */ - Elf64_Xword a_v; /* 64-bit id */ -} Aux64Info; - -/* BEGIN android-changed: these constants should come from <linux/auxvec.h>. */ -#if 0 -/* a_type */ -#define AT_NULL 0 /* Marks end of array */ -#define AT_IGNORE 1 /* No meaning, a_un is undefined */ -#define AT_EXECFD 2 /* Open file descriptor of object file */ -#define AT_PHDR 3 /* &phdr[0] */ -#define AT_PHENT 4 /* sizeof(phdr[0]) */ -#define AT_PHNUM 5 /* # phdr entries */ -#define AT_PAGESZ 6 /* PAGESIZE */ -#define AT_BASE 7 /* Interpreter base addr */ -#define AT_FLAGS 8 /* Processor flags */ -#define AT_ENTRY 9 /* Entry address of executable */ -#define AT_DCACHEBSIZE 10 /* Data cache block size */ -#define AT_ICACHEBSIZE 11 /* Instruction cache block size */ -#define AT_UCACHEBSIZE 12 /* Unified cache block size */ -#define AT_STACKBASE 13 /* Base address of the main thread */ - - /* Vendor specific */ -#define AT_MIPS_NOTELF 10 /* XXX a_val != 0 -> MIPS XCOFF executable */ - -#define AT_EUID 2000 /* euid (solaris compatible numbers) */ -#define AT_RUID 2001 /* ruid (solaris compatible numbers) */ -#define AT_EGID 2002 /* egid (solaris compatible numbers) */ -#define AT_RGID 2003 /* rgid (solaris compatible numbers) */ - - /* Solaris kernel specific */ -#define AT_SUN_LDELF 2004 /* dynamic linker's ELF header */ -#define AT_SUN_LDSHDR 2005 /* dynamic linker's section header */ -#define AT_SUN_LDNAME 2006 /* dynamic linker's name */ -#define AT_SUN_LPGSIZE 2007 /* large pagesize */ - - /* Other information */ -#define AT_SUN_PLATFORM 2008 /* sysinfo(SI_PLATFORM) */ -#define AT_SUN_HWCAP 2009 /* process hardware capabilities */ -#define AT_SUN_IFLUSH 2010 /* do we need to flush the instruction cache? */ -#define AT_SUN_CPU 2011 /* CPU name */ - /* ibcs2 emulation band aid */ -#define AT_SUN_EMUL_ENTRY 2012 /* coff entry point */ -#define AT_SUN_EMUL_EXECFD 2013 /* coff file descriptor */ - /* Executable's fully resolved name */ -#define AT_SUN_EXECNAME 2014 -#endif -/* END android-changed */ + Elf64_Half namesz; + Elf64_Half descsz; + Elf64_Half type; +} Elf64_Note; /* - * Note Headers + * XXX - these _KERNEL items aren't part of the ABI! */ -typedef struct { - Elf32_Word n_namesz; - Elf32_Word n_descsz; - Elf32_Word n_type; -} Elf32_Nhdr; - -typedef struct { - Elf64_Word n_namesz; - Elf64_Word n_descsz; - Elf64_Word n_type; -} Elf64_Nhdr; +#if defined(_KERNEL) || defined(_DYN_LOADER) -#define ELF_NOTE_GNU_NAMESZ 4 -#define ELF_NOTE_GNU_NAME "GNU\0" +#define ELF32_NO_ADDR ((u_long) ~0) /* Indicates addr. not yet filled in */ +#define ELF_AUX_ENTRIES 8 /* Size of aux array passed to loader */ -/* - * GNU-specific note type: ABI tag - * name: GNU\0 - * namesz: 4 - * desc: - * word[0]: OS tag - * word[1]: major version - * word[2]: minor version - * word[3]: teeny version - * descsz: 16 - */ -/* GNU-specific note name and description sizes */ -#define ELF_NOTE_TYPE_ABI_TAG 1 -#define ELF_NOTE_ABI_NAME ELF_NOTE_GNU_NAME -#define ELF_NOTE_ABI_NAMESZ ELF_NOTE_GNU_NAMESZ -#define ELF_NOTE_ABI_DESCSZ 16 -/* GNU-specific OS/version value stuff */ -#define ELF_NOTE_ABI_OS_LINUX 0 -#define ELF_NOTE_ABI_OS_HURD 1 -#define ELF_NOTE_ABI_OS_SOLARIS 2 -#define ELF_NOTE_ABI_OS_KFREEBSD 3 -#define ELF_NOTE_ABI_OS_KNETBSD 4 - -/* - * GNU-specific note type: Hardware capabilities - * name: GNU\0 - * namesz: 4 - * desc: - * word[0]: Number of entries - * word[1]: Bitmask of enabled entries - * Followed by a byte id, and a NUL terminated string per entry - * descsz: variable - */ -#define ELF_NOTE_TYPE_GNU_HWCAP 2 - -/* - * GNU-specific note type: Build ID generated by ld - * name: GNU\0 - * desc: - * word[0..4] SHA1 [default] - * or - * word[0..3] md5 or uuid - * descsz: 16 or 20 - */ -#define ELF_NOTE_TYPE_GNU_BUILD_ID 3 +typedef struct { + Elf32_Sword au_id; /* 32-bit id */ + Elf32_Word au_v; /* 32-bit value */ +} Aux32Info; -/* SuSE-specific note type: ABI - * name: SuSE\0 - * namesz: 5 - * desc: - * half[0] = MMmm - * - * M = product major version - * m = product minor version - * descsz: 2 - */ -#define ELF_NOTE_TYPE_SUSE_TAG 1 -/* SuSE-specific note name and description sizes */ -#define ELF_NOTE_SUSE_NAMESZ 5 -#define ELF_NOTE_SUSE_DESCSZ 2 -/* SuSE-specific note name */ -#define ELF_NOTE_SUSE_NAME "SuSE\0" - -/* SuSE-specific note type: version - * name: SuSE\0\0\0\0 - * namesz: 8 - * desc: - * word[0] = VVTTMMmm - * - * V = version of following data - * T = product type: [box, sles, nld, whatever] - * M = product major version - * m = product minor version - * descsz: 8 - */ -#define ELF_NOTE_TYPE_SUSE_VERSION_TAG 0x45537553 /* SuSE in LE */ -/* SuSE-specific note name and description sizes */ -#define ELF_NOTE_SUSE_VERSION_NAMESZ 8 -#define ELF_NOTE_SUSE_VERSION_DESCSZ 8 -/* SuSE-specific note name */ -#define ELF_NOTE_SUSE_VERSION_NAME "SuSE\0\0\0\0" - -/* NetBSD-specific note type: Emulation name. - * name: NetBSD\0\0 - * namesz: 8 - * desc: - * word[0]: MMmmrrpp00 - * - * M = major version - * m = minor version - * r = release ["",A-Z,Z[A-Z] but numeric] - * p = patchlevel - * descsz: 4 - */ -#define ELF_NOTE_TYPE_NETBSD_TAG 1 -/* NetBSD-specific note name and description sizes */ -#define ELF_NOTE_NETBSD_NAMESZ 7 -#define ELF_NOTE_NETBSD_DESCSZ 4 -/* NetBSD-specific note name */ -#define ELF_NOTE_NETBSD_NAME "NetBSD\0\0" - -/* NetBSD-specific note type: Checksum. - * There should be 1 NOTE per PT_LOAD section. - * name: ??? - * namesz: ??? - * desc: - * a tuple of <phnum>(16),<chk-type>(16),<chk-value>. - * descsz: ??? - */ -#define ELF_NOTE_TYPE_CHECKSUM_TAG 2 -#define ELF_NOTE_CHECKSUM_CRC32 1 -#define ELF_NOTE_CHECKSUM_MD5 2 -#define ELF_NOTE_CHECKSUM_SHA1 3 -#define ELF_NOTE_CHECKSUM_SHA256 4 +#define ELF64_NO_ADDR ((__uint64_t) ~0)/* Indicates addr. not yet filled in */ +#define ELF64_AUX_ENTRIES 8 /* Size of aux array passed to loader */ -/* - * NetBSD-specific note type: PaX. - * There should be 1 NOTE per executable. - * name: PaX\0 - * namesz: 4 - * desc: - * word[0]: capability bitmask - * descsz: 4 - */ -#define ELF_NOTE_TYPE_PAX_TAG 3 -#define ELF_NOTE_PAX_MPROTECT 0x01 /* Force enable Mprotect */ -#define ELF_NOTE_PAX_NOMPROTECT 0x02 /* Force disable Mprotect */ -#define ELF_NOTE_PAX_GUARD 0x04 /* Force enable Segvguard */ -#define ELF_NOTE_PAX_NOGUARD 0x08 /* Force disable Servguard */ -#define ELF_NOTE_PAX_ASLR 0x10 /* Force enable ASLR */ -#define ELF_NOTE_PAX_NOASLR 0x20 /* Force disable ASLR */ -#define ELF_NOTE_PAX_NAMESZ 4 -#define ELF_NOTE_PAX_NAME "PaX\0" -#define ELF_NOTE_PAX_DESCSZ 4 +typedef struct { + Elf64_Shalf au_id; /* 32-bit id */ + Elf64_Xword au_v; /* 64-bit id */ +} Aux64Info; -/* - * NetBSD-specific core file information. - * - * NetBSD ELF core files use notes to provide information about - * the process's state. The note name is "NetBSD-CORE" for - * information that is global to the process, and "NetBSD-CORE@nn", - * where "nn" is the lwpid of the LWP that the information belongs - * to (such as register state). - * - * We use the following note identifiers: - * - * ELF_NOTE_NETBSD_CORE_PROCINFO - * Note is a "netbsd_elfcore_procinfo" structure. - * - * We also use ptrace(2) request numbers (the ones that exist in - * machine-dependent space) to identify register info notes. The - * info in such notes is in the same format that ptrace(2) would - * export that information. - * - * Please try to keep the members of this structure nicely aligned, - * and if you add elements, add them to the end and bump the version. - */ +enum AuxID { + AUX_null = 0, + AUX_ignore = 1, + AUX_execfd = 2, + AUX_phdr = 3, /* &phdr[0] */ + AUX_phent = 4, /* sizeof(phdr[0]) */ + AUX_phnum = 5, /* # phdr entries */ + AUX_pagesz = 6, /* PAGESIZE */ + AUX_base = 7, /* ld.so base addr */ + AUX_flags = 8, /* processor flags */ + AUX_entry = 9, /* a.out entry */ + AUX_sun_uid = 2000, /* euid */ + AUX_sun_ruid = 2001, /* ruid */ + AUX_sun_gid = 2002, /* egid */ + AUX_sun_rgid = 2003 /* rgid */ +}; -#define ELF_NOTE_NETBSD_CORE_NAME "NetBSD-CORE" - -#define ELF_NOTE_NETBSD_CORE_PROCINFO 1 - -#define NETBSD_ELFCORE_PROCINFO_VERSION 1 - -struct netbsd_elfcore_procinfo { - /* Version 1 fields start here. */ - uint32_t cpi_version; /* our version */ - uint32_t cpi_cpisize; /* sizeof(this struct) */ - uint32_t cpi_signo; /* killing signal */ - uint32_t cpi_sigcode; /* signal code */ - uint32_t cpi_sigpend[4]; /* pending signals */ - uint32_t cpi_sigmask[4]; /* blocked signals */ - uint32_t cpi_sigignore[4]; /* ignored signals */ - uint32_t cpi_sigcatch[4]; /* caught signals */ - int32_t cpi_pid; /* process ID */ - int32_t cpi_ppid; /* parent process ID */ - int32_t cpi_pgrp; /* process group ID */ - int32_t cpi_sid; /* session ID */ - uint32_t cpi_ruid; /* real user ID */ - uint32_t cpi_euid; /* effective user ID */ - uint32_t cpi_svuid; /* saved user ID */ - uint32_t cpi_rgid; /* real group ID */ - uint32_t cpi_egid; /* effective group ID */ - uint32_t cpi_svgid; /* saved group ID */ - uint32_t cpi_nlwps; /* number of LWPs */ - int8_t cpi_name[32]; /* copy of p->p_comm */ - /* Add version 2 fields below here. */ - int32_t cpi_siglwp; /* LWP target of killing signal */ +struct elf_args { + u_long arg_entry; /* program entry point */ + u_long arg_interp; /* Interpreter load address */ + u_long arg_phaddr; /* program header address */ + u_long arg_phentsize; /* Size of program header */ + u_long arg_phnum; /* Number of program headers */ + u_long arg_os; /* OS tag */ }; -/* - * NetBSD-specific note type: MACHINE_ARCH. - * There should be 1 NOTE per executable. - * name: NetBSD\0 - * namesz: 7 - * desc: string - * descsz: variable - */ -#define ELF_NOTE_TYPE_MARCH_TAG 5 -/* NetBSD-specific note name and description sizes */ -#define ELF_NOTE_MARCH_NAMESZ ELF_NOTE_NETBSD_NAMESZ -/* NetBSD-specific note name */ -#define ELF_NOTE_MARCH_NAME ELF_NOTE_NETBSD_NAME +#endif #if !defined(ELFSIZE) && defined(ARCH_ELFSIZE) #define ELFSIZE ARCH_ELFSIZE @@ -1025,25 +546,25 @@ struct netbsd_elfcore_procinfo { #define Elf_Shdr Elf32_Shdr #define Elf_Sym Elf32_Sym #define Elf_Rel Elf32_Rel -#define Elf_Rela Elf32_Rela +#define Elf_RelA Elf32_Rela #define Elf_Dyn Elf32_Dyn +#define Elf_Half Elf32_Half #define Elf_Word Elf32_Word #define Elf_Sword Elf32_Sword -#define Elf_Half Elf32_Half #define Elf_Addr Elf32_Addr #define Elf_Off Elf32_Off -#define Elf_SOff Elf32_SOff #define Elf_Nhdr Elf32_Nhdr -#define Elf_Verdef Elf32_Verdef -#define Elf_Verdaux Elf32_Verdaux -#define Elf_Verneed Elf32_Verneed -#define Elf_Vernaux Elf32_Vernaux -#define Elf_Versym Elf32_Versym +#define Elf_Note Elf32_Note #define ELF_R_SYM ELF32_R_SYM #define ELF_R_TYPE ELF32_R_TYPE +#define ELF_R_INFO ELF32_R_INFO #define ELFCLASS ELFCLASS32 +#define ELF_ST_BIND ELF32_ST_BIND +#define ELF_ST_TYPE ELF32_ST_TYPE +#define ELF_ST_INFO ELF32_ST_INFO + #define AuxInfo Aux32Info #elif defined(ELFSIZE) && (ELFSIZE == 64) #define Elf_Ehdr Elf64_Ehdr @@ -1051,237 +572,54 @@ struct netbsd_elfcore_procinfo { #define Elf_Shdr Elf64_Shdr #define Elf_Sym Elf64_Sym #define Elf_Rel Elf64_Rel -#define Elf_Rela Elf64_Rela +#define Elf_RelA Elf64_Rela #define Elf_Dyn Elf64_Dyn +#define Elf_Half Elf64_Half #define Elf_Word Elf64_Word #define Elf_Sword Elf64_Sword -#define Elf_Half Elf64_Half #define Elf_Addr Elf64_Addr #define Elf_Off Elf64_Off -#define Elf_SOff Elf64_SOff #define Elf_Nhdr Elf64_Nhdr -#define Elf_Verdef Elf64_Verdef -#define Elf_Verdaux Elf64_Verdaux -#define Elf_Verneed Elf64_Verneed -#define Elf_Vernaux Elf64_Vernaux -#define Elf_Versym Elf64_Versym +#define Elf_Note Elf64_Note #define ELF_R_SYM ELF64_R_SYM #define ELF_R_TYPE ELF64_R_TYPE +#define ELF_R_INFO ELF64_R_INFO #define ELFCLASS ELFCLASS64 -#define AuxInfo Aux64Info -#endif - -#ifndef Elf_Symindx -#define Elf_Symindx uint32_t -#endif - -#define ELF32_ST_BIND(info) ELF_ST_BIND(info) -#define ELF32_ST_TYPE(info) ELF_ST_TYPE(info) -#define ELF32_ST_INFO(bind,type) ELF_ST_INFO(bind,type) -#define ELF32_ST_VISIBILITY(other) ELF_ST_VISIBILITY(other) - -#define ELF64_ST_BIND(info) ELF_ST_BIND(info) -#define ELF64_ST_TYPE(info) ELF_ST_TYPE(info) -#define ELF64_ST_INFO(bind,type) ELF_ST_INFO(bind,type) -#define ELF64_ST_VISIBILITY(other) ELF_ST_VISIBILITY(other) - -typedef struct { - Elf32_Half si_boundto; /* direct bindings - symbol bound to */ - Elf32_Half si_flags; /* per symbol flags */ -} Elf32_Syminfo; +#define ELF_ST_BIND ELF64_ST_BIND +#define ELF_ST_TYPE ELF64_ST_TYPE +#define ELF_ST_INFO ELF64_ST_INFO -typedef struct { - Elf64_Word si_boundto; /* direct bindings - symbol bound to */ - Elf64_Word si_flags; /* per symbol flags */ -} Elf64_Syminfo; - -#define SYMINFO_FLG_DIRECT 0x0001 /* symbol ref has direct association - to object containing definition */ -#define SYMINFO_FLG_PASSTHRU 0x0002 /* ignored - see SYMINFO_FLG_FILTER */ -#define SYMINFO_FLG_COPY 0x0004 /* symbol is a copy-reloc */ -#define SYMINFO_FLG_LAZYLOAD 0x0008 /* object containing defn should be - lazily-loaded */ -#define SYMINFO_FLG_DIRECTBIND 0x0010 /* ref should be bound directly to - object containing definition */ -#define SYMINFO_FLG_NOEXTDIRECT 0x0020 /* don't let an external reference - directly bind to this symbol */ -#define SYMINFO_FLG_FILTER 0x0002 /* symbol ref is associated to a */ -#define SYMINFO_FLG_AUXILIARY 0x0040 /* standard or auxiliary filter */ - -#define SYMINFO_BT_SELF 0xffff /* symbol bound to self */ -#define SYMINFO_BT_PARENT 0xfffe /* symbol bound to parent */ -#define SYMINFO_BT_NONE 0xfffd /* no special symbol binding */ -#define SYMINFO_BT_EXTERN 0xfffc /* symbol defined as external */ -#define SYMINFO_BT_LOWRESERVE 0xff00 /* beginning of reserved entries */ - -#define SYMINFO_NONE 0 /* Syminfo version */ -#define SYMINFO_CURRENT 1 -#define SYMINFO_NUM 2 - -/* - * These constants are used for Elf32_Verdef struct's version number. - */ -#define VER_DEF_NONE 0 -#define VER_DEF_CURRENT 1 - -/* - * These constants are used for Elf32_Verdef struct's vd_ndx. - */ -#define VER_DEF_IDX(x) VER_NDX(x) - -/* - * These constants are used for Elf32_Verdef struct's vd_flags. - */ -#define VER_FLG_BASE 0x1 -#define VER_FLG_WEAK 0x2 - -/* - * These are used in an Elf32_Versym field. - */ -#define VER_NDX_LOCAL 0 -#define VER_NDX_GLOBAL 1 -#define VER_NDX_GIVEN 2 - -/* - * These constants are used for Elf32_Verneed struct's version number. - */ -#define VER_NEED_NONE 0 -#define VER_NEED_CURRENT 1 - -/* - * These constants are used for Elf32_Vernaux struct's vna_other. - */ -#define VER_NEED_HIDDEN VER_NDX_HIDDEN -#define VER_NEED_IDX(x) VER_NDX(x) - -/* index */ -#define VER_NDX_HIDDEN 0x8000 -#define VER_NDX(x) ((x) & ~VER_NDX_HIDDEN) - -/* - * GNU Extension hidding symbol - */ -#define VERSYM_HIDDEN 0x8000 -#define VERSYM_VERSION 0x7fff - -#define ELF_VER_CHR '@' - -/* - * These are current size independent. - */ - -typedef struct { - Elf32_Half vd_version; /* version number of structure */ - Elf32_Half vd_flags; /* flags (VER_FLG_*) */ - Elf32_Half vd_ndx; /* version index */ - Elf32_Half vd_cnt; /* number of verdaux entries */ - Elf32_Word vd_hash; /* hash of name */ - Elf32_Word vd_aux; /* offset to verdaux entries */ - Elf32_Word vd_next; /* offset to next verdef */ -} Elf32_Verdef; -typedef Elf32_Verdef Elf64_Verdef; - -typedef struct { - Elf32_Word vda_name; /* string table offset of name */ - Elf32_Word vda_next; /* offset to verdaux */ -} Elf32_Verdaux; -typedef Elf32_Verdaux Elf64_Verdaux; - -typedef struct { - Elf32_Half vn_version; /* version number of structure */ - Elf32_Half vn_cnt; /* number of vernaux entries */ - Elf32_Word vn_file; /* string table offset of library name*/ - Elf32_Word vn_aux; /* offset to vernaux entries */ - Elf32_Word vn_next; /* offset to next verneed */ -} Elf32_Verneed; -typedef Elf32_Verneed Elf64_Verneed; - -typedef struct { - Elf32_Word vna_hash; /* Hash of dependency name */ - Elf32_Half vna_flags; /* flags (VER_FLG_*) */ - Elf32_Half vna_other; /* unused */ - Elf32_Word vna_name; /* string table offset to version name*/ - Elf32_Word vna_next; /* offset to next vernaux */ -} Elf32_Vernaux; -typedef Elf32_Vernaux Elf64_Vernaux; - -typedef struct { - Elf32_Half vs_vers; -} Elf32_Versym; -typedef Elf32_Versym Elf64_Versym; - -#ifdef _KERNEL - -#define ELF_AUX_ENTRIES 15 /* Max size of aux array passed to loader */ -#define ELF32_NO_ADDR (~(Elf32_Addr)0) /* Indicates addr. not yet filled in */ -#define ELF32_LINK_ADDR ((Elf32_Addr)-2) /* advises to use link address */ -#define ELF64_NO_ADDR (~(Elf64_Addr)0) /* Indicates addr. not yet filled in */ -#define ELF64_LINK_ADDR ((Elf64_Addr)-2) /* advises to use link address */ - -#if defined(ELFSIZE) && (ELFSIZE == 64) -#define ELF_NO_ADDR ELF64_NO_ADDR -#define ELF_LINK_ADDR ELF64_LINK_ADDR -#elif defined(ELFSIZE) && (ELFSIZE == 32) -#define ELF_NO_ADDR ELF32_NO_ADDR -#define ELF_LINK_ADDR ELF32_LINK_ADDR -#endif - -#ifndef ELF32_EHDR_FLAGS_OK -#define ELF32_EHDR_FLAGS_OK(eh) 1 -#endif - -#ifndef ELF64_EHDR_FLAGS_OK -#define ELF64_EHDR_FLAGS_OK(eh) 1 -#endif - -#if defined(ELFSIZE) && (ELFSIZE == 64) -#define ELF_EHDR_FLAGS_OK(eh) ELF64_EHDR_FLAGS_OK(eh) -#else -#define ELF_EHDR_FLAGS_OK(eh) ELF32_EHDR_FLAGS_OK(eh) -#endif - -#if defined(ELFSIZE) -struct elf_args { - Elf_Addr arg_entry; /* program entry point */ - Elf_Addr arg_interp; /* Interpreter load address */ - Elf_Addr arg_phaddr; /* program header address */ - Elf_Addr arg_phentsize; /* Size of program header */ - Elf_Addr arg_phnum; /* Number of program headers */ -}; +#define AuxInfo Aux64Info #endif -#ifdef _KERNEL_OPT -#include "opt_execfmt.h" +#ifndef _KERNEL +extern Elf_Dyn _DYNAMIC[]; #endif -struct ps_strings; - -#ifdef EXEC_ELF32 -int exec_elf32_makecmds(struct lwp *, struct exec_package *); -int elf32_copyargs(struct lwp *, struct exec_package *, - struct ps_strings *, char **, void *); - -int coredump_elf32(struct lwp *, void *); -int coredump_writenote_elf32(struct proc *, void *, Elf32_Nhdr *, - const char *, void *); - -int elf32_check_header(Elf32_Ehdr *, int); +#ifdef _KERNEL +#ifdef _KERN_DO_ELF64 +int exec_elf64_makecmds(struct proc *, struct exec_package *); +void *elf64_copyargs(struct exec_package *, struct ps_strings *, + void *, void *); +int exec_elf64_fixup(struct proc *, struct exec_package *); +char *elf64_check_brand(Elf64_Ehdr *); +int elf64_os_pt_note(struct proc *, struct exec_package *, Elf64_Ehdr *, + char *, size_t, size_t); #endif - -#ifdef EXEC_ELF64 -int exec_elf64_makecmds(struct lwp *, struct exec_package *); -int elf64_copyargs(struct lwp *, struct exec_package *, - struct ps_strings *, char **, void *); - -int coredump_elf64(struct lwp *, void *); -int coredump_writenote_elf64(struct proc *, void *, Elf64_Nhdr *, - const char *, void *); - -int elf64_check_header(Elf64_Ehdr *, int); +#ifdef _KERN_DO_ELF +int exec_elf32_makecmds(struct proc *, struct exec_package *); +void *elf32_copyargs(struct exec_package *, struct ps_strings *, + void *, void *); +int exec_elf32_fixup(struct proc *, struct exec_package *); +char *elf32_check_brand(Elf32_Ehdr *); +int elf32_os_pt_note(struct proc *, struct exec_package *, Elf32_Ehdr *, + char *, size_t, size_t); #endif #endif /* _KERNEL */ -#endif /* !_SYS_EXEC_ELF_H_ */ +#define ELF_TARG_VER 1 /* The ver for which this code is intended */ + +#endif /* _SYS_EXEC_ELF_H_ */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/klog.h b/9/platforms/android-19/arch-arm64/usr/include/sys/klog.h index 02851d2..acfaa20 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/klog.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/klog.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_KLOG_H_ #define _SYS_KLOG_H_ @@ -45,13 +46,6 @@ __BEGIN_DECLS #define KLOG_SIZE_UNREAD 9 #define KLOG_SIZE_BUFFER 10 -/* These are deprecated names that were used in earlier bionic releases. Do not use. */ -#define KLOG_DISABLE 6 -#define KLOG_ENABLE 7 -#define KLOG_SETLEVEL 8 -#define KLOG_UNREADSIZE 9 -#define KLOG_WRITE 10 - extern int klogctl(int, char *, int); __END_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/mman.h b/9/platforms/android-19/arch-arm64/usr/include/sys/mman.h index 7c5f8d7..5a8c985 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/mman.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/mman.h @@ -31,7 +31,6 @@ #include <sys/cdefs.h> #include <sys/types.h> #include <asm/mman.h> -#include <asm/page.h> __BEGIN_DECLS @@ -44,23 +43,23 @@ __BEGIN_DECLS #define MREMAP_MAYMOVE 1 #define MREMAP_FIXED 2 -extern void* mmap(void *, size_t, int, int, int, off_t); -extern void* mmap64(void *, size_t, int, int, int, off64_t); -extern int munmap(void *, size_t); -extern int msync(const void *, size_t, int); -extern int mprotect(const void *, size_t, int); -extern void* mremap(void *, size_t, size_t, unsigned long); +extern void* mmap(void*, size_t, int, int, int, off_t); +extern void* mmap64(void*, size_t, int, int, int, off64_t); +extern int munmap(void*, size_t); +extern int msync(const void*, size_t, int); +extern int mprotect(const void*, size_t, int); +extern void* mremap(void*, size_t, size_t, unsigned long); -extern int mlockall(int); -extern int munlockall(void); -extern int mlock(const void *, size_t); -extern int munlock(const void *, size_t); -extern int madvise(const void *, size_t, int); +extern int mlockall(int); +extern int munlockall(void); +extern int mlock(const void*, size_t); +extern int munlock(const void*, size_t); +extern int madvise(const void*, size_t, int); -extern int mlock(const void *addr, size_t len); -extern int munlock(const void *addr, size_t len); +extern int mlock(const void*, size_t); +extern int munlock(const void*, size_t); -extern int mincore(void* start, size_t length, unsigned char* vec); +extern int mincore(void*, size_t, unsigned char*); __END_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/socket.h b/9/platforms/android-19/arch-arm64/usr/include/sys/socket.h index 32d98ea..62a5300 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/socket.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/socket.h @@ -43,8 +43,9 @@ __BEGIN_DECLS #define sockaddr_storage __kernel_sockaddr_storage -typedef __sa_family_t sa_family_t; -typedef int socklen_t; +typedef unsigned short sa_family_t; + +struct timespec; #ifdef __mips__ #define SOCK_DGRAM 1 @@ -76,40 +77,45 @@ enum { }; struct sockaddr { - sa_family_t sa_family; - char sa_data[14]; + sa_family_t sa_family; + char sa_data[14]; }; struct linger { - int l_onoff; - int l_linger; + int l_onoff; + int l_linger; }; struct msghdr { - void * msg_name; - int msg_namelen; - struct iovec * msg_iov; - __kernel_size_t msg_iovlen; - void * msg_control; - __kernel_size_t msg_controllen; - unsigned msg_flags; + void* msg_name; + socklen_t msg_namelen; + struct iovec* msg_iov; + size_t msg_iovlen; + void* msg_control; + size_t msg_controllen; + int msg_flags; +}; + +struct mmsghdr { + struct msghdr msg_hdr; + unsigned int msg_len; }; struct cmsghdr { - __kernel_size_t cmsg_len; - int cmsg_level; - int cmsg_type; + size_t cmsg_len; + int cmsg_level; + int cmsg_type; }; #define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg)) #define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg)) #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) -#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) +#define CMSG_DATA(cmsg) ((void*)((char*)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) #define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) #define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) -#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? (struct cmsghdr *)(ctl) : (struct cmsghdr *)NULL) +#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? (struct cmsghdr*)(ctl) : (struct cmsghdr*)NULL) #define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen) -#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && (cmsg)->cmsg_len <= (unsigned long) ((mhdr)->msg_controllen - ((char *)(cmsg) - (char *)(mhdr)->msg_control))) +#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && (cmsg)->cmsg_len <= (unsigned long) ((mhdr)->msg_controllen - ((char*)(cmsg) - (char*)(mhdr)->msg_control))) #ifdef __GNUC__ #define __KINLINE static __inline__ @@ -119,16 +125,17 @@ struct cmsghdr { #define __KINLINE static #endif -__KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size, struct cmsghdr *__cmsg) { - struct cmsghdr * __ptr; - __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len)); - if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size) - return (struct cmsghdr *)0; - return __ptr; +__KINLINE struct cmsghdr* __cmsg_nxthdr(void* __ctl, size_t __size, struct cmsghdr* __cmsg) { + struct cmsghdr* __ptr; + __ptr = (struct cmsghdr*)(((unsigned char*) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len)); + if ((unsigned long)((char*)(__ptr+1) - (char*) __ctl) > __size) { + return NULL; + } + return __ptr; } -__KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg) { - return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); +__KINLINE struct cmsghdr* cmsg_nxthdr (struct msghdr* __msg, struct cmsghdr* __cmsg) { + return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); } #define SCM_RIGHTS 0x01 @@ -136,9 +143,9 @@ __KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__ #define SCM_SECURITY 0x03 struct ucred { - __u32 pid; - __u32 uid; - __u32 gid; + pid_t pid; + uid_t uid; + gid_t gid; }; #define AF_UNSPEC 0 @@ -242,6 +249,9 @@ struct ucred { #define MSG_ERRQUEUE 0x2000 #define MSG_NOSIGNAL 0x4000 #define MSG_MORE 0x8000 +#define MSG_WAITFORONE 0x10000 +#define MSG_FASTOPEN 0x20000000 +#define MSG_CMSG_CLOEXEC 0x40000000 #define MSG_EOF MSG_FIN #define MSG_CMSG_COMPAT 0 @@ -277,43 +287,45 @@ struct ucred { # define __socketcall extern #endif -__socketcall int socket(int, int, int); -__socketcall int bind(int, const struct sockaddr *, int); -__socketcall int connect(int, const struct sockaddr *, socklen_t); +__socketcall int accept(int, struct sockaddr*, socklen_t*); +__socketcall int bind(int, const struct sockaddr*, int); +__socketcall int connect(int, const struct sockaddr*, socklen_t); +__socketcall int getpeername(int, struct sockaddr*, socklen_t*); +__socketcall int getsockname(int, struct sockaddr*, socklen_t*); +__socketcall int getsockopt(int, int, int, void*, socklen_t*); __socketcall int listen(int, int); -__socketcall int accept(int, struct sockaddr *, socklen_t *); -__socketcall int getsockname(int, struct sockaddr *, socklen_t *); -__socketcall int getpeername(int, struct sockaddr *, socklen_t *); -__socketcall int socketpair(int, int, int, int *); +__socketcall int recvmmsg(int, struct mmsghdr*, unsigned int, int, const struct timespec*); +__socketcall int recvmsg(int, struct msghdr*, int); +__socketcall int sendmmsg(int, const struct mmsghdr*, unsigned int, int); +__socketcall int sendmsg(int, const struct msghdr*, int); +__socketcall int setsockopt(int, int, int, const void*, socklen_t); __socketcall int shutdown(int, int); -__socketcall int setsockopt(int, int, int, const void *, socklen_t); -__socketcall int getsockopt(int, int, int, void *, socklen_t *); -__socketcall int sendmsg(int, const struct msghdr *, unsigned int); -__socketcall int recvmsg(int, struct msghdr *, unsigned int); +__socketcall int socket(int, int, int); +__socketcall int socketpair(int, int, int, int*); -extern ssize_t send(int, const void *, size_t, unsigned int); -extern ssize_t recv(int, void *, size_t, unsigned int); +extern ssize_t send(int, const void*, size_t, int); +extern ssize_t recv(int, void*, size_t, int); -__socketcall ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t); -__socketcall ssize_t recvfrom(int, void *, size_t, unsigned int, const struct sockaddr *, socklen_t *); +__socketcall ssize_t sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t); +__socketcall ssize_t recvfrom(int, void*, size_t, int, const struct sockaddr*, socklen_t*); #if defined(__BIONIC_FORTIFY) __errordecl(__recvfrom_error, "recvfrom called with size bigger than buffer"); -extern ssize_t __recvfrom_chk(int, void*, size_t, size_t, unsigned int, const struct sockaddr*, socklen_t *); -extern ssize_t __recvfrom_real(int, void *, size_t, unsigned int, const struct sockaddr*, socklen_t*) +extern ssize_t __recvfrom_chk(int, void*, size_t, size_t, int, const struct sockaddr*, socklen_t*); +extern ssize_t __recvfrom_real(int, void*, size_t, int, const struct sockaddr*, socklen_t*) __asm__(__USER_LABEL_PREFIX__ "recvfrom"); __BIONIC_FORTIFY_INLINE -ssize_t recvfrom(int fd, void* buf, size_t len, unsigned int flags, const struct sockaddr* src_addr, socklen_t* addrlen) { +ssize_t recvfrom(int fd, void* buf, size_t len, int flags, const struct sockaddr* src_addr, socklen_t* addr_len) { size_t bos = __bos0(buf); #if !defined(__clang__) if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) { - return __recvfrom_real(fd, buf, len, flags, src_addr, addrlen); + return __recvfrom_real(fd, buf, len, flags, src_addr, addr_len); } if (__builtin_constant_p(len) && (len <= bos)) { - return __recvfrom_real(fd, buf, len, flags, src_addr, addrlen); + return __recvfrom_real(fd, buf, len, flags, src_addr, addr_len); } if (__builtin_constant_p(len) && (len > bos)) { @@ -321,12 +333,12 @@ ssize_t recvfrom(int fd, void* buf, size_t len, unsigned int flags, const struct } #endif - return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addrlen); + return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addr_len); } __BIONIC_FORTIFY_INLINE -ssize_t recv(int socket, void *buf, size_t buflen, unsigned int flags) { - return recvfrom(socket, buf, buflen, flags, NULL, 0); +ssize_t recv(int socket, void* buf, size_t len, int flags) { + return recvfrom(socket, buf, len, flags, NULL, 0); } #endif /* __BIONIC_FORTIFY */ diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/stat.h b/9/platforms/android-19/arch-arm64/usr/include/sys/stat.h index 37b8dc2..e62e76d 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/stat.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/stat.h @@ -38,101 +38,101 @@ __BEGIN_DECLS #if defined(__aarch64__) -struct stat { - unsigned long st_dev; - unsigned long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned long st_rdev; - unsigned long __pad1; - long st_size; - int st_blksize; - int __pad2; - long st_blocks; - long st_atime; - unsigned long st_atime_nsec; - long st_mtime; - unsigned long st_mtime_nsec; - long st_ctime; - unsigned long st_ctime_nsec; - unsigned int __unused4; - unsigned int __unused5; -}; +#define __STAT64_BODY \ + unsigned long st_dev; \ + unsigned long st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned long st_rdev; \ + unsigned long __pad1; \ + long st_size; \ + int st_blksize; \ + int __pad2; \ + long st_blocks; \ + long st_atime; \ + unsigned long st_atime_nsec; \ + long st_mtime; \ + unsigned long st_mtime_nsec; \ + long st_ctime; \ + unsigned long st_ctime_nsec; \ + unsigned int __unused4; \ + unsigned int __unused5; \ + #elif defined(__mips__) -struct stat { - unsigned int st_dev; - unsigned int __pad0[3]; - unsigned long long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - unsigned int __pad1[3]; - long long st_size; - unsigned int st_atime; - unsigned int st_atime_nsec; - unsigned int st_mtime; - unsigned int st_mtime_nsec; - unsigned int st_ctime; - unsigned int st_ctime_nsec; - unsigned int st_blksize; - unsigned int __pad2; - unsigned long long st_blocks; -}; +#define __STAT64_BODY \ + unsigned int st_dev; \ + unsigned int __pad0[3]; \ + unsigned long long st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned int st_rdev; \ + unsigned int __pad1[3]; \ + long long st_size; \ + unsigned int st_atime; \ + unsigned int st_atime_nsec; \ + unsigned int st_mtime; \ + unsigned int st_mtime_nsec; \ + unsigned int st_ctime; \ + unsigned int st_ctime_nsec; \ + unsigned int st_blksize; \ + unsigned int __pad2; \ + unsigned long long st_blocks; \ + #elif defined(__x86_64__) -struct stat { - unsigned long st_dev; - unsigned long st_ino; - unsigned long st_nlink; - unsigned int st_mode; - unsigned int st_uid; - unsigned int st_gid; - unsigned int __pad0; - unsigned long st_rdev; - long st_size; - long st_blksize; - long st_blocks; - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; - unsigned long st_mtime_nsec; - unsigned long st_ctime; - unsigned long st_ctime_nsec; - long __pad3[3]; -}; +#define __STAT64_BODY \ + unsigned long st_dev; \ + unsigned long st_ino; \ + unsigned long st_nlink; \ + unsigned int st_mode; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned int __pad0; \ + unsigned long st_rdev; \ + long st_size; \ + long st_blksize; \ + long st_blocks; \ + unsigned long st_atime; \ + unsigned long st_atime_nsec; \ + unsigned long st_mtime; \ + unsigned long st_mtime_nsec; \ + unsigned long st_ctime; \ + unsigned long st_ctime_nsec; \ + long __pad3[3]; \ + #else -struct stat { - unsigned long long st_dev; - unsigned char __pad0[4]; - unsigned long __st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned long st_uid; - unsigned long st_gid; - unsigned long long st_rdev; - unsigned char __pad3[4]; - long long st_size; - unsigned long st_blksize; - unsigned long long st_blocks; - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; - unsigned long st_mtime_nsec; - unsigned long st_ctime; - unsigned long st_ctime_nsec; - unsigned long long st_ino; -}; +#define __STAT64_BODY \ + unsigned long long st_dev; \ + unsigned char __pad0[4]; \ + unsigned long __st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned long long st_rdev; \ + unsigned char __pad3[4]; \ + long long st_size; \ + unsigned long st_blksize; \ + unsigned long long st_blocks; \ + unsigned long st_atime; \ + unsigned long st_atime_nsec; \ + unsigned long st_mtime; \ + unsigned long st_mtime_nsec; \ + unsigned long st_ctime; \ + unsigned long st_ctime_nsec; \ + unsigned long long st_ino; \ + #endif -/* For compatibility with GLibc, we provide macro aliases - * for the non-Posix nano-seconds accessors. - */ -#define st_atimensec st_atime_nsec -#define st_mtimensec st_mtime_nsec -#define st_ctimensec st_ctime_nsec +struct stat { __STAT64_BODY }; +struct stat64 { __STAT64_BODY }; + +#define st_atimensec st_atime_nsec +#define st_mtimensec st_mtime_nsec +#define st_ctimensec st_ctime_nsec #ifdef __USE_BSD /* Permission macros provided by glibc for compatibility with BSDs. */ @@ -141,21 +141,26 @@ struct stat { #define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */ #endif -extern int chmod(const char *, mode_t); -extern int fchmod(int, mode_t); -extern int mkdir(const char *, mode_t); +extern int chmod(const char*, mode_t); +extern int fchmod(int, mode_t); +extern int mkdir(const char*, mode_t); -extern int stat(const char *, struct stat *); -extern int fstat(int, struct stat *); -extern int lstat(const char *, struct stat *); -extern int mknod(const char *, mode_t, dev_t); +extern int fstat(int, struct stat*); +extern int fstat64(int, struct stat64*); +extern int fstatat(int, const char*, struct stat*, int); +extern int fstatat64(int, const char*, struct stat64*, int); +extern int lstat(const char*, struct stat*); +extern int lstat64(const char*, struct stat64*); +extern int stat(const char*, struct stat*); +extern int stat64(const char*, struct stat64*); + +extern int mknod(const char*, mode_t, dev_t); extern mode_t umask(mode_t); #if defined(__BIONIC_FORTIFY) extern mode_t __umask_chk(mode_t); -extern mode_t __umask_real(mode_t) - __asm__(__USER_LABEL_PREFIX__ "umask"); +extern mode_t __umask_real(mode_t) __asm__(__USER_LABEL_PREFIX__ "umask"); __errordecl(__umask_invalid_mode, "umask called with invalid mode"); __BIONIC_FORTIFY_INLINE @@ -172,20 +177,14 @@ mode_t umask(mode_t mode) { } #endif /* defined(__BIONIC_FORTIFY) */ - -#define stat64 stat -#define fstat64 fstat -#define lstat64 lstat - extern int mkfifo(const char*, mode_t); extern int fchmodat(int, const char*, mode_t, int); -extern int fstatat(int, const char*, struct stat*, int); extern int mkdirat(int, const char*, mode_t); extern int mknodat(int, const char*, mode_t, dev_t); -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) +#define UTIME_NOW ((1L << 30) - 1L) +#define UTIME_OMIT ((1L << 30) - 2L) extern int utimensat(int fd, const char *path, const struct timespec times[2], int flags); extern int futimens(int fd, const struct timespec times[2]); diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/statvfs.h b/9/platforms/android-19/arch-arm64/usr/include/sys/statvfs.h index e910c03..3d8179e 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/statvfs.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/statvfs.h @@ -23,19 +23,21 @@ __BEGIN_DECLS -struct statvfs { - unsigned long f_bsize; - unsigned long f_frsize; - fsblkcnt_t f_blocks; - fsblkcnt_t f_bfree; - fsblkcnt_t f_bavail; - fsfilcnt_t f_files; - fsfilcnt_t f_ffree; - fsfilcnt_t f_favail; - unsigned long f_fsid; - unsigned long f_flag; - unsigned long f_namemax; -}; +#define __STATVFS64_BODY \ + unsigned long f_bsize; \ + unsigned long f_frsize; \ + fsblkcnt_t f_blocks; \ + fsblkcnt_t f_bfree; \ + fsblkcnt_t f_bavail; \ + fsfilcnt_t f_files; \ + fsfilcnt_t f_ffree; \ + fsfilcnt_t f_favail; \ + unsigned long f_fsid; \ + unsigned long f_flag; \ + unsigned long f_namemax; \ + +struct statvfs { __STATVFS64_BODY }; +struct statvfs64 { __STATVFS64_BODY }; #define ST_RDONLY 0x0001 #define ST_NOSUID 0x0002 @@ -48,7 +50,9 @@ struct statvfs { #define ST_RELATIME 0x1000 extern int statvfs(const char* __restrict, struct statvfs* __restrict) __nonnull((1, 2)); +extern int statvfs64(const char* __restrict, struct statvfs64* __restrict) __nonnull((1, 2)); extern int fstatvfs(int, struct statvfs*) __nonnull((2)); +extern int fstatvfs64(int, struct statvfs64*) __nonnull((2)); __END_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/times.h b/9/platforms/android-19/arch-arm64/usr/include/sys/times.h index 1b9b8b2..6ce5b55 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/times.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/times.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_TIMES_H_ #define _SYS_TIMES_H_ @@ -34,7 +35,7 @@ __BEGIN_DECLS -extern clock_t times(struct tms *); +extern clock_t times(struct tms*); __END_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/types.h b/9/platforms/android-19/arch-arm64/usr/include/sys/types.h index f8ae813..dc847d2 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/types.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/types.h @@ -35,28 +35,48 @@ #include <linux/types.h> #include <linux/posix_types.h> -/* __kernel_gid_t and __kernel_uid_t are 16 bit for legacy reasons. - * Android uses __kernel_uid32_t and __kernel_gid32_t instead. - */ -typedef __kernel_gid32_t gid_t; -typedef __kernel_uid32_t uid_t; +/* gids, uids, and pids are all 32-bit. */ +typedef __kernel_gid32_t __gid_t; +typedef __gid_t gid_t; +typedef __kernel_uid32_t __uid_t; +typedef __uid_t uid_t; +typedef __kernel_pid_t __pid_t; +typedef __pid_t pid_t; +typedef uint32_t __id_t; +typedef __id_t id_t; typedef unsigned long blkcnt_t; typedef unsigned long blksize_t; typedef __kernel_caddr_t caddr_t; typedef __kernel_clock_t clock_t; -typedef __kernel_clockid_t clockid_t; + +typedef __kernel_clockid_t __clockid_t; +typedef __clockid_t clockid_t; + typedef __kernel_daddr_t daddr_t; typedef unsigned long fsblkcnt_t; typedef unsigned long fsfilcnt_t; -typedef __kernel_ino_t ino_t; -typedef __kernel_key_t key_t; -typedef __kernel_mode_t mode_t; + +typedef __kernel_mode_t __mode_t; +typedef __mode_t mode_t; + +typedef __kernel_key_t __key_t; +typedef __key_t key_t; + +typedef uint32_t __ino_t; +typedef __ino_t ino_t; + +typedef uint32_t __nlink_t; typedef __nlink_t nlink_t; -typedef __kernel_pid_t pid_t; -typedef __kernel_suseconds_t suseconds_t; -typedef __kernel_timer_t timer_t; -typedef unsigned int useconds_t; + +typedef void* __timer_t; +typedef __timer_t timer_t; + +typedef int32_t __suseconds_t; +typedef __suseconds_t suseconds_t; + +typedef uint32_t __useconds_t; +typedef __useconds_t useconds_t; #if !defined(__LP64__) /* This historical accident means that we had a 32-bit dev_t on 32-bit architectures. */ @@ -66,7 +86,8 @@ typedef uint64_t dev_t; #endif /* This historical accident means that we had a 32-bit time_t on 32-bit architectures. */ -typedef __kernel_time_t time_t; +typedef __kernel_time_t __time_t; +typedef __time_t time_t; /* This historical accident means that we had a 32-bit off_t on 32-bit architectures. */ #ifndef _OFF_T_DEFINED_ @@ -76,9 +97,6 @@ typedef __kernel_off_t off_t; typedef __kernel_loff_t loff_t; typedef loff_t off64_t; -/* This one really is meant to be just 32 bits! */ -typedef uint32_t id_t; - /* while POSIX wants these in <sys/types.h>, we * declare then in <pthread.h> instead */ #if 0 @@ -93,6 +111,17 @@ typedef .... pthread_rwlock_attr_t; typedef .... pthread_t; #endif +#if !defined(__LP64__) +/* This historical accident means that we had a signed socklen_t on 32-bit architectures. */ +typedef int32_t __socklen_t; +#else +/* LP64 still has a 32-bit socklen_t. */ +typedef uint32_t __socklen_t; +#endif +typedef __socklen_t socklen_t; + +typedef __builtin_va_list __va_list; + #ifndef _SSIZE_T_DEFINED_ #define _SSIZE_T_DEFINED_ /* Traditionally, bionic's ssize_t was "long int". This caused GCC to emit warnings when you diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/un.h b/9/platforms/android-19/arch-arm64/usr/include/sys/un.h index f89ead3..65ffbdc 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/un.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/un.h @@ -28,8 +28,7 @@ #ifndef _SYS_UN_H_ #define _SYS_UN_H_ -#include <sys/_types.h> -typedef __sa_family_t sa_family_t; +typedef unsigned short sa_family_t; #include <linux/un.h> diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/user.h b/9/platforms/android-19/arch-arm64/usr/include/sys/user.h index 90cce80..e16b1a5 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/user.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/user.h @@ -30,6 +30,7 @@ #define _SYS_USER_H_ #include <sys/cdefs.h> +#include <limits.h> /* For PAGE_SIZE. */ __BEGIN_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/sys/vfs.h b/9/platforms/android-19/arch-arm64/usr/include/sys/vfs.h index fd2655c..cd6044d 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/sys/vfs.h +++ b/9/platforms/android-19/arch-arm64/usr/include/sys/vfs.h @@ -38,76 +38,74 @@ __BEGIN_DECLS typedef struct { int __val[2]; } __fsid_t; typedef __fsid_t fsid_t; -#if defined(__LP64__) -#if defined(__mips__) -/* 64-bit MIPS */ -struct statfs { - uint64_t f_type; - uint64_t f_bsize; - uint64_t f_frsize; /* Fragment size - unsupported */ - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_bavail; - fsid_t f_fsid; - uint64_t f_namelen; - uint64_t f_flags; - uint64_t f_spare[5]; -}; -#else -struct statfs { - uint64_t f_type; - uint64_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - fsid_t f_fsid; - uint64_t f_namelen; - uint64_t f_frsize; - uint64_t f_flags; - uint64_t f_spare[4]; -}; -#endif +#if defined(__aarch64__) || defined(__x86_64__) +#define __STATFS64_BODY \ + uint64_t f_type; \ + uint64_t f_bsize; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_bavail; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + fsid_t f_fsid; \ + uint64_t f_namelen; \ + uint64_t f_frsize; \ + uint64_t f_flags; \ + uint64_t f_spare[4]; \ + +#elif defined(__mips__) && defined(__LP64__) +/* 64-bit MIPS. */ +#define __STATFS64_BODY \ + uint64_t f_type; \ + uint64_t f_bsize; \ + uint64_t f_frsize; /* Fragment size - unsupported. */ \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + uint64_t f_bavail; \ + fsid_t f_fsid; \ + uint64_t f_namelen; \ + uint64_t f_flags; \ + uint64_t f_spare[5]; \ + #elif defined(__mips__) /* 32-bit MIPS (corresponds to the kernel's statfs64 type). */ -struct statfs { - uint32_t f_type; - uint32_t f_bsize; - uint32_t f_frsize; - uint32_t __pad; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_bavail; - fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_flags; - uint32_t f_spare[5]; -}; +#define __STATFS64_BODY \ + uint32_t f_type; \ + uint32_t f_bsize; \ + uint32_t f_frsize; \ + uint32_t __pad; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + uint64_t f_bavail; \ + fsid_t f_fsid; \ + uint32_t f_namelen; \ + uint32_t f_flags; \ + uint32_t f_spare[5]; \ + #else /* 32-bit ARM or x86 (corresponds to the kernel's statfs64 type). */ -struct statfs { - uint32_t f_type; - uint32_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_frsize; - uint32_t f_flags; - uint32_t f_spare[4]; -}; +#define __STATFS64_BODY \ + uint32_t f_type; \ + uint32_t f_bsize; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_bavail; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + fsid_t f_fsid; \ + uint32_t f_namelen; \ + uint32_t f_frsize; \ + uint32_t f_flags; \ + uint32_t f_spare[4]; \ + #endif -/* Source compatibility with glibc. */ -#define statfs64 statfs +struct statfs { __STATFS64_BODY }; +struct statfs64 { __STATFS64_BODY }; /* Declare that we have the f_namelen, f_frsize, and f_flags fields. */ #define _STATFS_F_NAMELEN @@ -160,7 +158,9 @@ struct statfs { #define _XIAFS_SUPER_MAGIC 0x012FD16D extern int statfs(const char*, struct statfs*) __nonnull((1, 2)); +extern int statfs64(const char*, struct statfs64*) __nonnull((1, 2)); extern int fstatfs(int, struct statfs*) __nonnull((2)); +extern int fstatfs64(int, struct statfs64*) __nonnull((2)); __END_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/termios.h b/9/platforms/android-19/arch-arm64/usr/include/termios.h index 0d44355..b9685ca 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/termios.h +++ b/9/platforms/android-19/arch-arm64/usr/include/termios.h @@ -31,87 +31,23 @@ #include <sys/cdefs.h> #include <sys/ioctl.h> #include <sys/types.h> -#include <stdint.h> #include <linux/termios.h> __BEGIN_DECLS -/* Redefine these to match their ioctl number */ -#undef TCSANOW -#define TCSANOW TCSETS - -#undef TCSADRAIN -#define TCSADRAIN TCSETSW - -#undef TCSAFLUSH -#define TCSAFLUSH TCSETSF - -static __inline__ int tcgetattr(int fd, struct termios *s) -{ - return ioctl(fd, TCGETS, s); -} - -static __inline__ int tcsetattr(int fd, int __opt, const struct termios *s) -{ - return ioctl(fd, __opt, (void *)s); -} - -static __inline__ int tcflow(int fd, int action) -{ - return ioctl(fd, TCXONC, (void *)(intptr_t)action); -} - -static __inline__ int tcflush(int fd, int __queue) -{ - return ioctl(fd, TCFLSH, (void *)(intptr_t)__queue); -} - -static __inline__ int tcdrain(int fd) -{ - return ioctl(fd, TCSBRK, (void *)(intptr_t)1); -} - -static __inline__ pid_t tcgetsid(int fd) -{ - pid_t _pid; - return ioctl(fd, TIOCGSID, &_pid) ? (pid_t)-1 : _pid; -} - -static __inline__ int tcsendbreak(int fd, int __duration) -{ - return ioctl(fd, TCSBRKP, (void *)(uintptr_t)__duration); -} - -static __inline__ speed_t cfgetospeed(const struct termios *s) -{ - return (speed_t)(s->c_cflag & CBAUD); -} - -static __inline__ int cfsetospeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static __inline__ speed_t cfgetispeed(const struct termios *s) -{ - return (speed_t)(s->c_cflag & CBAUD); -} - -static __inline__ int cfsetispeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static __inline__ void cfmakeraw(struct termios *s) -{ - s->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); - s->c_oflag &= ~OPOST; - s->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); - s->c_cflag &= ~(CSIZE|PARENB); - s->c_cflag |= CS8; -} +speed_t cfgetispeed(const struct termios*); +speed_t cfgetospeed(const struct termios*); +void cfmakeraw(struct termios*); +int cfsetispeed(struct termios*, speed_t); +int cfsetospeed(struct termios*, speed_t); +int cfsetspeed(struct termios*, speed_t); +int tcdrain(int); +int tcflow(int, int); +int tcflush(int, int); +int tcgetattr(int, struct termios*); +pid_t tcgetsid(int); +int tcsendbreak(int, int); +int tcsetattr(int, int, const struct termios*); __END_DECLS diff --git a/9/platforms/android-19/arch-arm64/usr/include/unistd.h b/9/platforms/android-19/arch-arm64/usr/include/unistd.h index 29758f5..d21f23d 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/unistd.h +++ b/9/platforms/android-19/arch-arm64/usr/include/unistd.h @@ -64,6 +64,7 @@ extern pid_t setsid(void); extern int execv(const char *, char * const *); extern int execvp(const char *, char * const *); +extern int execvpe(const char *, char * const *, char * const *); extern int execve(const char *, char * const *, char * const *); extern int execl(const char *, const char *, ...); extern int execlp(const char *, const char *, ...); @@ -185,14 +186,15 @@ extern int sysconf(int name); extern int daemon(int, int); -/* A special syscall that is only available on the ARM, not x86 function. */ -extern int cacheflush(long start, long end, long flags); +#if defined(__arm__) || (defined(__mips__) && !defined(__LP64__)) +extern int cacheflush(long, long, long); + /* __attribute__((deprecated("use __builtin___clear_cache instead"))); */ +#endif extern pid_t tcgetpgrp(int fd); extern int tcsetpgrp(int fd, pid_t _pid); #if 0 /* MISSING FROM BIONIC */ -extern int execvpe(const char *, char * const *, char * const *); extern int execlpe(const char *, const char *, ...); extern int getfsuid(uid_t); extern int setfsuid(uid_t); diff --git a/9/platforms/android-19/arch-arm64/usr/include/wchar.h b/9/platforms/android-19/arch-arm64/usr/include/wchar.h index 76ac02c..32cf127 100644 --- a/9/platforms/android-19/arch-arm64/usr/include/wchar.h +++ b/9/platforms/android-19/arch-arm64/usr/include/wchar.h @@ -147,6 +147,9 @@ extern wchar_t *wmemset(wchar_t *, wchar_t, size_t); extern int wprintf(const wchar_t *, ...); extern int wscanf(const wchar_t *, ...); +extern size_t wcslcat(wchar_t*, const wchar_t*, size_t); +extern size_t wcslcpy(wchar_t*, const wchar_t*, size_t); + /* No really supported. These are just for making libstdc++-v3 happy. */ typedef void *wctrans_t; extern wint_t towctrans(wint_t, wctrans_t); diff --git a/9/platforms/android-19/arch-arm64/usr/lib/crtbegin_dynamic.o b/9/platforms/android-19/arch-arm64/usr/lib/crtbegin_dynamic.o Binary files differindex 1a15238..03629d2 100644 --- a/9/platforms/android-19/arch-arm64/usr/lib/crtbegin_dynamic.o +++ b/9/platforms/android-19/arch-arm64/usr/lib/crtbegin_dynamic.o diff --git a/9/platforms/android-19/arch-arm64/usr/lib/crtbegin_static.o b/9/platforms/android-19/arch-arm64/usr/lib/crtbegin_static.o Binary files differindex 1a15238..03629d2 100644 --- a/9/platforms/android-19/arch-arm64/usr/lib/crtbegin_static.o +++ b/9/platforms/android-19/arch-arm64/usr/lib/crtbegin_static.o diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libEGL.so b/9/platforms/android-19/arch-arm64/usr/lib/libEGL.so Binary files differindex ca5ae69..8bd0c90 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libEGL.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libEGL.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libGLESv1_CM.so b/9/platforms/android-19/arch-arm64/usr/lib/libGLESv1_CM.so Binary files differindex 15c9411..0765cbf 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libGLESv1_CM.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libGLESv1_CM.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libGLESv2.so b/9/platforms/android-19/arch-arm64/usr/lib/libGLESv2.so Binary files differindex 7617200..5fdc4a5 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libGLESv2.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libGLESv2.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libGLESv3.so b/9/platforms/android-19/arch-arm64/usr/lib/libGLESv3.so Binary files differindex dff0aa9..ef4963d 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libGLESv3.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libGLESv3.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libOpenMAXAL.so b/9/platforms/android-19/arch-arm64/usr/lib/libOpenMAXAL.so Binary files differindex aeff9da..feeb398 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libOpenMAXAL.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libOpenMAXAL.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libOpenSLES.so b/9/platforms/android-19/arch-arm64/usr/lib/libOpenSLES.so Binary files differindex 9dcfa43..ef3d0e2 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libOpenSLES.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libOpenSLES.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libandroid.so b/9/platforms/android-19/arch-arm64/usr/lib/libandroid.so Binary files differindex 5b690b0..8c3e118 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libandroid.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libandroid.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libc.a b/9/platforms/android-19/arch-arm64/usr/lib/libc.a Binary files differindex 032edca..78a1e52 100644 --- a/9/platforms/android-19/arch-arm64/usr/lib/libc.a +++ b/9/platforms/android-19/arch-arm64/usr/lib/libc.a diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libc.so b/9/platforms/android-19/arch-arm64/usr/lib/libc.so Binary files differindex 05404cd..5be6798 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libc.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libc.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libdl.so b/9/platforms/android-19/arch-arm64/usr/lib/libdl.so Binary files differindex e5fdd24..4164444 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libdl.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libdl.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libjnigraphics.so b/9/platforms/android-19/arch-arm64/usr/lib/libjnigraphics.so Binary files differindex 6558d9a..33e0b92 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libjnigraphics.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libjnigraphics.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/liblog.so b/9/platforms/android-19/arch-arm64/usr/lib/liblog.so Binary files differindex d2028b4..4611a7b 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/liblog.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/liblog.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libm.a b/9/platforms/android-19/arch-arm64/usr/lib/libm.a Binary files differindex c076d25..5d4bf27 100644 --- a/9/platforms/android-19/arch-arm64/usr/lib/libm.a +++ b/9/platforms/android-19/arch-arm64/usr/lib/libm.a diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libm.so b/9/platforms/android-19/arch-arm64/usr/lib/libm.so Binary files differindex 83a71d8..0ec0999 100755 --- a/9/platforms/android-19/arch-arm64/usr/lib/libm.so +++ b/9/platforms/android-19/arch-arm64/usr/lib/libm.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libstdc++.a b/9/platforms/android-19/arch-arm64/usr/lib/libstdc++.a Binary files differindex fd78d62..9024b39 100644 --- a/9/platforms/android-19/arch-arm64/usr/lib/libstdc++.a +++ b/9/platforms/android-19/arch-arm64/usr/lib/libstdc++.a diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libstdc++.so b/9/platforms/android-19/arch-arm64/usr/lib/libstdc++.so Binary files differnew file mode 100755 index 0000000..1285f60 --- /dev/null +++ b/9/platforms/android-19/arch-arm64/usr/lib/libstdc++.so diff --git a/9/platforms/android-19/arch-arm64/usr/lib/libz.a b/9/platforms/android-19/arch-arm64/usr/lib/libz.a Binary files differindex f1ac08c..2a5f510 100644 --- a/9/platforms/android-19/arch-arm64/usr/lib/libz.a +++ b/9/platforms/android-19/arch-arm64/usr/lib/libz.a diff --git a/9/platforms/android-19/arch-mips64/usr/include/arpa/nameser.h b/9/platforms/android-19/arch-mips64/usr/include/arpa/nameser.h index 028eadc..a87ac91 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/arpa/nameser.h +++ b/9/platforms/android-19/arch-mips64/usr/include/arpa/nameser.h @@ -1,41 +1,668 @@ +/* $NetBSD: nameser.h,v 1.25 2009/04/12 17:07:34 christos Exp $ */ + +/* + * Portions Copyright (C) 2004, 2005, 2008, 2009 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 1996-2003 Internet Software Consortium. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + /* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. + * Copyright (c) 1983, 1989, 1993 + * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * * Redistributions of source code must retain the above copyright + * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#ifndef _arpa_nameser_h -#define _arpa_nameser_h + +/* + * Id: nameser.h,v 1.16 2009/03/03 01:52:48 each Exp + */ + +#ifndef _ARPA_NAMESER_H_ +#define _ARPA_NAMESER_H_ + +#define BIND_4_COMPAT #include <sys/types.h> #include <sys/cdefs.h> -/* this header intentionally blank - * - * the definitions normally found in <arpa/nameser.h> are - * really a bunch of resolver's internal declarations that - * should not be exposed to client code in any way +/* + * Revision information. This is the release date in YYYYMMDD format. + * It can change every day so the right thing to do with it is use it + * in preprocessor commands such as "#if (__NAMESER > 19931104)". Do not + * compare for equality; rather, use it to determine whether your libbind.a + * contains a new enough lib/nameser/ to support the feature you need. + */ + +#define __NAMESER 20090302 /*%< New interface version stamp. */ + +/* + * Define constants based on RFC0883, RFC1034, RFC 1035 + */ +#define NS_PACKETSZ 512 /* default UDP packet size */ +#define NS_MAXDNAME 1025 /* maximum domain name (presentation format)*/ +#define NS_MAXMSG 65535 /* maximum message size */ +#define NS_MAXCDNAME 255 /* maximum compressed domain name */ +#define NS_MAXLABEL 63 /* maximum length of domain label */ +#define NS_MAXLABELS 128 /* theoretical max #/labels per domain name */ +#define NS_MAXNNAME 256 /* maximum uncompressed (binary) domain name*/ +#define NS_MAXPADDR (sizeof "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") +#define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */ +#define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */ +#define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */ +#define NS_INT32SZ 4 /* #/bytes of data in a uint32_t */ +#define NS_INT16SZ 2 /* #/bytes of data in a uint16_t */ +#define NS_INT8SZ 1 /* #/bytes of data in a uint8_t */ +#define NS_INADDRSZ 4 /* IPv4 T_A */ +#define NS_IN6ADDRSZ 16 /* IPv6 T_AAAA */ +#define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */ +#define NS_DEFAULTPORT 53 /* For both TCP and UDP. */ + +/* + * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord() + * in synch with it. + */ +typedef enum __ns_sect { + ns_s_qd = 0, /* Query: Question. */ + ns_s_zn = 0, /* Update: Zone. */ + ns_s_an = 1, /* Query: Answer. */ + ns_s_pr = 1, /* Update: Prerequisites. */ + ns_s_ns = 2, /* Query: Name servers. */ + ns_s_ud = 2, /* Update: Update. */ + ns_s_ar = 3, /* Query|Update: Additional records. */ + ns_s_max = 4 +} ns_sect; + +/* + * Network name (compressed or not) type. Equivilent to a pointer when used + * in a function prototype. Can be const'd. + */ +typedef u_char ns_nname[NS_MAXNNAME]; +typedef const u_char *ns_nname_ct; +typedef u_char *ns_nname_t; + +struct ns_namemap { ns_nname_ct base; int len; }; +typedef struct ns_namemap *ns_namemap_t; +typedef const struct ns_namemap *ns_namemap_ct; + +/* + * This is a message handle. It is caller allocated and has no dynamic data. + * This structure is intended to be opaque to all but ns_parse.c, thus the + * leading _'s on the member names. Use the accessor functions, not the _'s. + */ +typedef struct __ns_msg { + const u_char *_msg, *_eom; + uint16_t _id, _flags, _counts[ns_s_max]; + const u_char *_sections[ns_s_max]; + ns_sect _sect; + int _rrnum; + const u_char *_msg_ptr; +} ns_msg; +/* + * This is a newmsg handle, used when constructing new messages with + * ns_newmsg_init, et al. + */ +struct ns_newmsg { + ns_msg msg; + const u_char *dnptrs[25]; + const u_char **lastdnptr; +}; +typedef struct ns_newmsg ns_newmsg; + +/* Private data structure - do not use from outside library. */ +struct _ns_flagdata { int mask, shift; }; +extern const struct _ns_flagdata _ns_flagdata[]; + +/* Accessor macros - this is part of the public interface. */ + +#define ns_msg_id(handle) ((handle)._id + 0) +#define ns_msg_base(handle) ((handle)._msg + 0) +#define ns_msg_end(handle) ((handle)._eom + 0) +#define ns_msg_size(handle) ((size_t)((handle)._eom - (handle)._msg)) +#define ns_msg_count(handle, section) ((handle)._counts[section] + 0) + +/* + * This is a parsed record. It is caller allocated and has no dynamic data. + */ +typedef struct __ns_rr { + char name[NS_MAXDNAME]; + uint16_t type; + uint16_t rr_class; + uint32_t ttl; + uint16_t rdlength; + const u_char * rdata; +} ns_rr; + +/* + * Same thing, but using uncompressed network binary names, and real C types. + */ +typedef struct __ns_rr2 { + ns_nname nname; + size_t nnamel; + int type; + int rr_class; + u_int ttl; + int rdlength; + const u_char * rdata; +} ns_rr2; +/* Accessor macros - this is part of the public interface. */ +#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".") +#define ns_rr_nname(rr) ((const ns_nname_t)(rr).nname) +#define ns_rr_nnamel(rr) ((rr).nnamel + 0) +#define ns_rr_type(rr) ((ns_type)((rr).type + 0)) +#define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0)) +#define ns_rr_ttl(rr) ((u_long)(rr).ttl + 0) +#define ns_rr_rdlen(rr) ((size_t)(rr).rdlength + 0) +#define ns_rr_rdata(rr) ((rr).rdata + 0) + +/* + * These don't have to be in the same order as in the packet flags word, + * and they can even overlap in some cases, but they will need to be kept + * in synch with ns_parse.c:ns_flagdata[]. + */ +typedef enum __ns_flag { + ns_f_qr, /* Question/Response. */ + ns_f_opcode, /* Operation code. */ + ns_f_aa, /* Authoritative Answer. */ + ns_f_tc, /* Truncation occurred. */ + ns_f_rd, /* Recursion Desired. */ + ns_f_ra, /* Recursion Available. */ + ns_f_z, /* MBZ. */ + ns_f_ad, /* Authentic Data (DNSSEC). */ + ns_f_cd, /* Checking Disabled (DNSSEC). */ + ns_f_rcode, /* Response code. */ + ns_f_max +} ns_flag; + +/* + * Currently defined opcodes. */ +typedef enum __ns_opcode { + ns_o_query = 0, /* Standard query. */ + ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */ + ns_o_status = 2, /* Name server status query (unsupported). */ + /* Opcode 3 is undefined/reserved. */ + ns_o_notify = 4, /* Zone change notification. */ + ns_o_update = 5, /* Zone update message. */ + ns_o_max = 6 +} ns_opcode; + +/* + * Currently defined response codes. + */ +typedef enum __ns_rcode { + ns_r_noerror = 0, /* No error occurred. */ + ns_r_formerr = 1, /* Format error. */ + ns_r_servfail = 2, /* Server failure. */ + ns_r_nxdomain = 3, /* Name error. */ + ns_r_notimpl = 4, /* Unimplemented. */ + ns_r_refused = 5, /* Operation refused. */ + /* these are for BIND_UPDATE */ + ns_r_yxdomain = 6, /* Name exists */ + ns_r_yxrrset = 7, /* RRset exists */ + ns_r_nxrrset = 8, /* RRset does not exist */ + ns_r_notauth = 9, /* Not authoritative for zone */ + ns_r_notzone = 10, /* Zone of record different from zone section */ + ns_r_max = 11, + /* The following are EDNS extended rcodes */ + ns_r_badvers = 16, + /* The following are TSIG errors */ + ns_r_badsig = 16, + ns_r_badkey = 17, + ns_r_badtime = 18 +} ns_rcode; + +/* BIND_UPDATE */ +typedef enum __ns_update_operation { + ns_uop_delete = 0, + ns_uop_add = 1, + ns_uop_max = 2 +} ns_update_operation; + +/* + * This structure is used for TSIG authenticated messages + */ +struct ns_tsig_key { + char name[NS_MAXDNAME], alg[NS_MAXDNAME]; + unsigned char *data; + int len; +}; +typedef struct ns_tsig_key ns_tsig_key; + +/* + * This structure is used for TSIG authenticated TCP messages + */ +struct ns_tcp_tsig_state { + int counter; + struct dst_key *key; + void *ctx; + unsigned char sig[NS_PACKETSZ]; + int siglen; +}; +typedef struct ns_tcp_tsig_state ns_tcp_tsig_state; + +#define NS_TSIG_FUDGE 300 +#define NS_TSIG_TCP_COUNT 100 +#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT" + +#define NS_TSIG_ERROR_NO_TSIG -10 +#define NS_TSIG_ERROR_NO_SPACE -11 +#define NS_TSIG_ERROR_FORMERR -12 + +/* + * Currently defined type values for resources and queries. + */ +typedef enum __ns_type { + ns_t_invalid = 0, /* Cookie. */ + ns_t_a = 1, /* Host address. */ + ns_t_ns = 2, /* Authoritative server. */ + ns_t_md = 3, /* Mail destination. */ + ns_t_mf = 4, /* Mail forwarder. */ + ns_t_cname = 5, /* Canonical name. */ + ns_t_soa = 6, /* Start of authority zone. */ + ns_t_mb = 7, /* Mailbox domain name. */ + ns_t_mg = 8, /* Mail group member. */ + ns_t_mr = 9, /* Mail rename name. */ + ns_t_null = 10, /* Null resource record. */ + ns_t_wks = 11, /* Well known service. */ + ns_t_ptr = 12, /* Domain name pointer. */ + ns_t_hinfo = 13, /* Host information. */ + ns_t_minfo = 14, /* Mailbox information. */ + ns_t_mx = 15, /* Mail routing information. */ + ns_t_txt = 16, /* Text strings. */ + ns_t_rp = 17, /* Responsible person. */ + ns_t_afsdb = 18, /* AFS cell database. */ + ns_t_x25 = 19, /* X_25 calling address. */ + ns_t_isdn = 20, /* ISDN calling address. */ + ns_t_rt = 21, /* Router. */ + ns_t_nsap = 22, /* NSAP address. */ + ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */ + ns_t_sig = 24, /* Security signature. */ + ns_t_key = 25, /* Security key. */ + ns_t_px = 26, /* X.400 mail mapping. */ + ns_t_gpos = 27, /* Geographical position (withdrawn). */ + ns_t_aaaa = 28, /* IPv6 Address. */ + ns_t_loc = 29, /* Location Information. */ + ns_t_nxt = 30, /* Next domain (security). */ + ns_t_eid = 31, /* Endpoint identifier. */ + ns_t_nimloc = 32, /* Nimrod Locator. */ + ns_t_srv = 33, /* Server Selection. */ + ns_t_atma = 34, /* ATM Address */ + ns_t_naptr = 35, /* Naming Authority PoinTeR */ + ns_t_kx = 36, /* Key Exchange */ + ns_t_cert = 37, /* Certification record */ + ns_t_a6 = 38, /* IPv6 address (experimental) */ + ns_t_dname = 39, /* Non-terminal DNAME */ + ns_t_sink = 40, /* Kitchen sink (experimentatl) */ + ns_t_opt = 41, /* EDNS0 option (meta-RR) */ + ns_t_apl = 42, /* Address prefix list (RFC 3123) */ + ns_t_ds = 43, /* Delegation Signer */ + ns_t_sshfp = 44, /* SSH Fingerprint */ + ns_t_ipseckey = 45, /* IPSEC Key */ + ns_t_rrsig = 46, /* RRset Signature */ + ns_t_nsec = 47, /* Negative security */ + ns_t_dnskey = 48, /* DNS Key */ + ns_t_dhcid = 49, /* Dynamic host configuratin identifier */ + ns_t_nsec3 = 50, /* Negative security type 3 */ + ns_t_nsec3param = 51, /* Negative security type 3 parameters */ + ns_t_hip = 55, /* Host Identity Protocol */ + ns_t_spf = 99, /* Sender Policy Framework */ + ns_t_tkey = 249, /* Transaction key */ + ns_t_tsig = 250, /* Transaction signature. */ + ns_t_ixfr = 251, /* Incremental zone transfer. */ + ns_t_axfr = 252, /* Transfer zone of authority. */ + ns_t_mailb = 253, /* Transfer mailbox records. */ + ns_t_maila = 254, /* Transfer mail agent records. */ + ns_t_any = 255, /* Wildcard match. */ + ns_t_zxfr = 256, /* BIND-specific, nonstandard. */ + ns_t_dlv = 32769, /* DNSSEC look-aside validatation. */ + ns_t_max = 65536 +} ns_type; + +/* Exclusively a QTYPE? (not also an RTYPE) */ +#define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \ + (t) == ns_t_mailb || (t) == ns_t_maila) +/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */ +#define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt) +/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */ +#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t)) +#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr) +#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \ + (t) == ns_t_zxfr) + +/* + * Values for class field + */ +typedef enum __ns_class { + ns_c_invalid = 0, /* Cookie. */ + ns_c_in = 1, /* Internet. */ + ns_c_2 = 2, /* unallocated/unsupported. */ + ns_c_chaos = 3, /* MIT Chaos-net. */ + ns_c_hs = 4, /* MIT Hesiod. */ + /* Query class values which do not appear in resource records */ + ns_c_none = 254, /* for prereq. sections in update requests */ + ns_c_any = 255, /* Wildcard match. */ + ns_c_max = 65536 +} ns_class; + +/* DNSSEC constants. */ + +typedef enum __ns_key_types { + ns_kt_rsa = 1, /* key type RSA/MD5 */ + ns_kt_dh = 2, /* Diffie Hellman */ + ns_kt_dsa = 3, /* Digital Signature Standard (MANDATORY) */ + ns_kt_private = 254 /* Private key type starts with OID */ +} ns_key_types; + +typedef enum __ns_cert_types { + cert_t_pkix = 1, /* PKIX (X.509v3) */ + cert_t_spki = 2, /* SPKI */ + cert_t_pgp = 3, /* PGP */ + cert_t_url = 253, /* URL private type */ + cert_t_oid = 254 /* OID private type */ +} ns_cert_types; + +/* Flags field of the KEY RR rdata. */ +#define NS_KEY_TYPEMASK 0xC000 /* Mask for "type" bits */ +#define NS_KEY_TYPE_AUTH_CONF 0x0000 /* Key usable for both */ +#define NS_KEY_TYPE_CONF_ONLY 0x8000 /* Key usable for confidentiality */ +#define NS_KEY_TYPE_AUTH_ONLY 0x4000 /* Key usable for authentication */ +#define NS_KEY_TYPE_NO_KEY 0xC000 /* No key usable for either; no key */ +/* The type bits can also be interpreted independently, as single bits: */ +#define NS_KEY_NO_AUTH 0x8000 /* Key unusable for authentication */ +#define NS_KEY_NO_CONF 0x4000 /* Key unusable for confidentiality */ +#define NS_KEY_RESERVED2 0x2000 /* Security is *mandatory* if bit=0 */ +#define NS_KEY_EXTENDED_FLAGS 0x1000 /* reserved - must be zero */ +#define NS_KEY_RESERVED4 0x0800 /* reserved - must be zero */ +#define NS_KEY_RESERVED5 0x0400 /* reserved - must be zero */ +#define NS_KEY_NAME_TYPE 0x0300 /* these bits determine the type */ +#define NS_KEY_NAME_USER 0x0000 /* key is assoc. with user */ +#define NS_KEY_NAME_ENTITY 0x0200 /* key is assoc. with entity eg host */ +#define NS_KEY_NAME_ZONE 0x0100 /* key is zone key */ +#define NS_KEY_NAME_RESERVED 0x0300 /* reserved meaning */ +#define NS_KEY_RESERVED8 0x0080 /* reserved - must be zero */ +#define NS_KEY_RESERVED9 0x0040 /* reserved - must be zero */ +#define NS_KEY_RESERVED10 0x0020 /* reserved - must be zero */ +#define NS_KEY_RESERVED11 0x0010 /* reserved - must be zero */ +#define NS_KEY_SIGNATORYMASK 0x000F /* key can sign RR's of same name */ +#define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \ + NS_KEY_RESERVED4 | \ + NS_KEY_RESERVED5 | \ + NS_KEY_RESERVED8 | \ + NS_KEY_RESERVED9 | \ + NS_KEY_RESERVED10 | \ + NS_KEY_RESERVED11 ) +#define NS_KEY_RESERVED_BITMASK2 0xFFFF /* no bits defined here */ + +/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */ +#define NS_ALG_MD5RSA 1 /* MD5 with RSA */ +#define NS_ALG_DH 2 /* Diffie Hellman KEY */ +#define NS_ALG_DSA 3 /* DSA KEY */ +#define NS_ALG_DSS NS_ALG_DSA +#define NS_ALG_EXPIRE_ONLY 253 /* No alg, no security */ +#define NS_ALG_PRIVATE_OID 254 /* Key begins with OID giving alg */ + +/* Protocol values */ +/* value 0 is reserved */ +#define NS_KEY_PROT_TLS 1 +#define NS_KEY_PROT_EMAIL 2 +#define NS_KEY_PROT_DNSSEC 3 +#define NS_KEY_PROT_IPSEC 4 +#define NS_KEY_PROT_ANY 255 + +/* Signatures */ +#define NS_MD5RSA_MIN_BITS 512 /* Size of a mod or exp in bits */ +#define NS_MD5RSA_MAX_BITS 4096 + /* Total of binary mod and exp */ +#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3) + /* Max length of text sig block */ +#define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4) +#define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8) +#define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8) + +#define NS_DSA_SIG_SIZE 41 +#define NS_DSA_MIN_SIZE 213 +#define NS_DSA_MAX_BYTES 405 + +/* Offsets into SIG record rdata to find various values */ +#define NS_SIG_TYPE 0 /* Type flags */ +#define NS_SIG_ALG 2 /* Algorithm */ +#define NS_SIG_LABELS 3 /* How many labels in name */ +#define NS_SIG_OTTL 4 /* Original TTL */ +#define NS_SIG_EXPIR 8 /* Expiration time */ +#define NS_SIG_SIGNED 12 /* Signature time */ +#define NS_SIG_FOOT 16 /* Key footprint */ +#define NS_SIG_SIGNER 18 /* Domain name of who signed it */ + +/* How RR types are represented as bit-flags in NXT records */ +#define NS_NXT_BITS 8 +#define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_MAX 127 + +/* + * EDNS0 extended flags and option codes, host order. + */ +#define NS_OPT_DNSSEC_OK 0x8000U +#define NS_OPT_NSID 3 + +/* + * Inline versions of get/put short/long. Pointer is advanced. + */ +#define NS_GET16(s, cp) do { \ + const u_char *t_cp = (const u_char *)(cp); \ + (s) = ((uint16_t)t_cp[0] << 8) \ + | ((uint16_t)t_cp[1]) \ + ; \ + (cp) += NS_INT16SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_GET32(l, cp) do { \ + const u_char *t_cp = (const u_char *)(cp); \ + (l) = ((uint32_t)t_cp[0] << 24) \ + | ((uint32_t)t_cp[1] << 16) \ + | ((uint32_t)t_cp[2] << 8) \ + | ((uint32_t)t_cp[3]) \ + ; \ + (cp) += NS_INT32SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_PUT16(s, cp) do { \ + uint32_t t_s = (uint32_t)(s); \ + u_char *t_cp = (u_char *)(cp); \ + *t_cp++ = t_s >> 8; \ + *t_cp = t_s; \ + (cp) += NS_INT16SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_PUT32(l, cp) do { \ + uint32_t t_l = (uint32_t)(l); \ + u_char *t_cp = (u_char *)(cp); \ + *t_cp++ = t_l >> 24; \ + *t_cp++ = t_l >> 16; \ + *t_cp++ = t_l >> 8; \ + *t_cp = t_l; \ + (cp) += NS_INT32SZ; \ +} while (/*CONSTCOND*/0) + +/* + * ANSI C identifier hiding for bind's lib/nameser. + */ +#define ns_msg_getflag __ns_msg_getflag +#define ns_get16 __ns_get16 +#define ns_get32 __ns_get32 +#define ns_put16 __ns_put16 +#define ns_put32 __ns_put32 +#define ns_initparse __ns_initparse +#define ns_skiprr __ns_skiprr +#define ns_parserr __ns_parserr +#define ns_parserr2 __ns_parserr2 +#define ns_sprintrr __ns_sprintrr +#define ns_sprintrrf __ns_sprintrrf +#define ns_format_ttl __ns_format_ttl +#define ns_parse_ttl __ns_parse_ttl +#define ns_datetosecs __ns_datetosecs +#define ns_name_ntol __ns_name_ntol +#define ns_name_ntop __ns_name_ntop +#define ns_name_pton __ns_name_pton +#define ns_name_pton2 __ns_name_pton2 +#define ns_name_unpack __ns_name_unpack +#define ns_name_unpack2 __ns_name_unpack2 +#define ns_name_pack __ns_name_pack +#define ns_name_compress __ns_name_compress +#define ns_name_uncompress __ns_name_uncompress +#define ns_name_skip __ns_name_skip +#define ns_name_rollback __ns_name_rollback +#define ns_name_length __ns_name_length +#define ns_name_eq __ns_name_eq +#define ns_name_owned __ns_name_owned +#define ns_name_map __ns_name_map +#define ns_name_labels __ns_name_labels +#define ns_sign __ns_sign +#define ns_sign2 __ns_sign2 +#define ns_sign_tcp __ns_sign_tcp +#define ns_sign_tcp2 __ns_sign_tcp2 +#define ns_sign_tcp_init __ns_sign_tcp_init +#define ns_find_tsig __ns_find_tsig +#define ns_verify __ns_verify +#define ns_verify_tcp __ns_verify_tcp +#define ns_verify_tcp_init __ns_verify_tcp_init +#define ns_samedomain __ns_samedomain +#define ns_subdomain __ns_subdomain +#define ns_makecanon __ns_makecanon +#define ns_samename __ns_samename +#define ns_newmsg_init __ns_newmsg_init +#define ns_newmsg_copy __ns_newmsg_copy +#define ns_newmsg_id __ns_newmsg_id +#define ns_newmsg_flag __ns_newmsg_flag +#define ns_newmsg_q __ns_newmsg_q +#define ns_newmsg_rr __ns_newmsg_rr +#define ns_newmsg_done __ns_newmsg_done +#define ns_rdata_unpack __ns_rdata_unpack +#define ns_rdata_equal __ns_rdata_equal +#define ns_rdata_refers __ns_rdata_refers + +__BEGIN_DECLS +int ns_msg_getflag(ns_msg, int); +uint16_t ns_get16(const u_char *); +uint32_t ns_get32(const u_char *); +void ns_put16(uint16_t, u_char *); +void ns_put32(uint32_t, u_char *); +int ns_initparse(const u_char *, int, ns_msg *); +int ns_skiprr(const u_char *, const u_char *, ns_sect, int); +int ns_parserr(ns_msg *, ns_sect, int, ns_rr *); +int ns_parserr2(ns_msg *, ns_sect, int, ns_rr2 *); +int ns_sprintrr(const ns_msg *, const ns_rr *, + const char *, const char *, char *, size_t); +int ns_sprintrrf(const u_char *, size_t, const char *, + ns_class, ns_type, u_long, const u_char *, + size_t, const char *, const char *, + char *, size_t); +int ns_format_ttl(u_long, char *, size_t); +int ns_parse_ttl(const char *, u_long *); +uint32_t ns_datetosecs(const char *cp, int *errp); +int ns_name_ntol(const u_char *, u_char *, size_t); +int ns_name_ntop(const u_char *, char *, size_t); +int ns_name_pton(const char *, u_char *, size_t); +int ns_name_pton2(const char *, u_char *, size_t, size_t *); +int ns_name_unpack(const u_char *, const u_char *, + const u_char *, u_char *, size_t); +int ns_name_unpack2(const u_char *, const u_char *, + const u_char *, u_char *, size_t, + size_t *); +int ns_name_pack(const u_char *, u_char *, int, + const u_char **, const u_char **); +int ns_name_uncompress(const u_char *, const u_char *, + const u_char *, char *, size_t); +int ns_name_compress(const char *, u_char *, size_t, + const u_char **, const u_char **); +int ns_name_skip(const u_char **, const u_char *); +void ns_name_rollback(const u_char *, const u_char **, + const u_char **); +int ns_sign(u_char *, int *, int, int, void *, + const u_char *, int, u_char *, int *, time_t); +int ns_sign2(u_char *, int *, int, int, void *, + const u_char *, int, u_char *, int *, time_t, + u_char **, u_char **); +ssize_t ns_name_length(ns_nname_ct, size_t); +int ns_name_eq(ns_nname_ct, size_t, ns_nname_ct, size_t); +int ns_name_owned(ns_namemap_ct, int, ns_namemap_ct, int); +int ns_name_map(ns_nname_ct, size_t, ns_namemap_t, int); +int ns_name_labels(ns_nname_ct, size_t); +int ns_sign_tcp(u_char *, int *, int, int, + ns_tcp_tsig_state *, int); +int ns_sign_tcp2(u_char *, int *, int, int, + ns_tcp_tsig_state *, int, + u_char **, u_char **); +int ns_sign_tcp_init(void *, const u_char *, int, + ns_tcp_tsig_state *); +u_char *ns_find_tsig(u_char *, u_char *); +int ns_verify(u_char *, int *, void *, + const u_char *, int, u_char *, int *, + time_t *, int); +int ns_verify_tcp(u_char *, int *, ns_tcp_tsig_state *, int); +int ns_verify_tcp_init(void *, const u_char *, int, + ns_tcp_tsig_state *); +int ns_samedomain(const char *, const char *); +int ns_subdomain(const char *, const char *); +int ns_makecanon(const char *, char *, size_t); +int ns_samename(const char *, const char *); +int ns_newmsg_init(u_char *buffer, size_t bufsiz, ns_newmsg *); +int ns_newmsg_copy(ns_newmsg *, ns_msg *); +void ns_newmsg_id(ns_newmsg *handle, uint16_t id); +void ns_newmsg_flag(ns_newmsg *handle, ns_flag flag, u_int value); +int ns_newmsg_q(ns_newmsg *handle, ns_nname_ct qname, + ns_type qtype, ns_class qclass); +int ns_newmsg_rr(ns_newmsg *handle, ns_sect sect, + ns_nname_ct name, ns_type type, + ns_class rr_class, uint32_t ttl, + uint16_t rdlen, const u_char *rdata); +size_t ns_newmsg_done(ns_newmsg *handle); +ssize_t ns_rdata_unpack(const u_char *, const u_char *, ns_type, + const u_char *, size_t, u_char *, size_t); +int ns_rdata_equal(ns_type, + const u_char *, size_t, + const u_char *, size_t); +int ns_rdata_refers(ns_type, + const u_char *, size_t, + const u_char *); +__END_DECLS + +#ifdef BIND_4_COMPAT +#include <arpa/nameser_compat.h> +#endif -#endif /* _arpa_nameser_h */ +#endif /* !_ARPA_NAMESER_H_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/arpa/nameser_compat.h b/9/platforms/android-19/arch-mips64/usr/include/arpa/nameser_compat.h new file mode 100644 index 0000000..e060f60 --- /dev/null +++ b/9/platforms/android-19/arch-mips64/usr/include/arpa/nameser_compat.h @@ -0,0 +1,238 @@ +/* $NetBSD: nameser_compat.h,v 1.1.1.2 2004/11/07 01:28:27 christos Exp $ */ + +/* Copyright (c) 1983, 1989 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * from nameser.h 8.1 (Berkeley) 6/2/93 + * Id: nameser_compat.h,v 1.8 2006/05/19 02:33:40 marka Exp + */ + +#ifndef _ARPA_NAMESER_COMPAT_ +#define _ARPA_NAMESER_COMPAT_ + +#define __BIND 19950621 /* (DEAD) interface version stamp. */ + +#include <endian.h> + +#ifndef BYTE_ORDER +#if (BSD >= 199103) +# include <machine/endian.h> +#else +#ifdef __linux__ +# include <endian.h> +#else +#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */ +#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ +#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp)*/ + +#if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \ + defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \ + defined(__i386__) || defined(__i386) || defined(__amd64__) || \ + defined(__x86_64__) || defined(MIPSEL) || defined(_MIPSEL) || \ + defined(BIT_ZERO_ON_RIGHT) || defined(__alpha__) || defined(__alpha) || \ + (defined(__Lynx__) && defined(__x86__)) +#define BYTE_ORDER LITTLE_ENDIAN +#endif + +#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \ + defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \ + defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\ + defined(apollo) || defined(__convex__) || defined(_CRAY) || \ + defined(__hppa) || defined(__hp9000) || \ + defined(__hp9000s300) || defined(__hp9000s700) || \ + defined(__hp3000s900) || defined(__hpux) || defined(MPE) || \ + defined (BIT_ZERO_ON_LEFT) || defined(m68k) || defined(__sparc) || \ + (defined(__Lynx__) && \ + (defined(__68k__) || defined(__sparc__) || defined(__powerpc__))) +#define BYTE_ORDER BIG_ENDIAN +#endif +#endif /* __linux */ +#endif /* BSD */ +#endif /* BYTE_ORDER */ + +#if !defined(BYTE_ORDER) || \ + (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \ + BYTE_ORDER != PDP_ENDIAN) + /* you must determine what the correct bit order is for + * your compiler - the next line is an intentional error + * which will force your compiles to bomb until you fix + * the above macros. + */ + #error "Undefined or invalid BYTE_ORDER"; +#endif + +/* + * Structure for query header. The order of the fields is machine- and + * compiler-dependent, depending on the byte/bit order and the layout + * of bit fields. We use bit fields only in int variables, as this + * is all ANSI requires. This requires a somewhat confusing rearrangement. + */ + +typedef struct { + unsigned id :16; /* query identification number */ +#if BYTE_ORDER == BIG_ENDIAN + /* fields in third byte */ + unsigned qr: 1; /* response flag */ + unsigned opcode: 4; /* purpose of message */ + unsigned aa: 1; /* authoritive answer */ + unsigned tc: 1; /* truncated message */ + unsigned rd: 1; /* recursion desired */ + /* fields in fourth byte */ + unsigned ra: 1; /* recursion available */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ad: 1; /* authentic data from named */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned rcode :4; /* response code */ +#endif +#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN + /* fields in third byte */ + unsigned rd :1; /* recursion desired */ + unsigned tc :1; /* truncated message */ + unsigned aa :1; /* authoritive answer */ + unsigned opcode :4; /* purpose of message */ + unsigned qr :1; /* response flag */ + /* fields in fourth byte */ + unsigned rcode :4; /* response code */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned ad: 1; /* authentic data from named */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ra :1; /* recursion available */ +#endif + /* remaining bytes */ + unsigned qdcount :16; /* number of question entries */ + unsigned ancount :16; /* number of answer entries */ + unsigned nscount :16; /* number of authority entries */ + unsigned arcount :16; /* number of resource entries */ +} HEADER; + +#define PACKETSZ NS_PACKETSZ +#define MAXDNAME NS_MAXDNAME +#define MAXCDNAME NS_MAXCDNAME +#define MAXLABEL NS_MAXLABEL +#define HFIXEDSZ NS_HFIXEDSZ +#define QFIXEDSZ NS_QFIXEDSZ +#define RRFIXEDSZ NS_RRFIXEDSZ +#define INT32SZ NS_INT32SZ +#define INT16SZ NS_INT16SZ +#define INT8SZ NS_INT8SZ +#define INADDRSZ NS_INADDRSZ +#define IN6ADDRSZ NS_IN6ADDRSZ +#define INDIR_MASK NS_CMPRSFLGS +#define NAMESERVER_PORT NS_DEFAULTPORT + +#define S_ZONE ns_s_zn +#define S_PREREQ ns_s_pr +#define S_UPDATE ns_s_ud +#define S_ADDT ns_s_ar + +#define QUERY ns_o_query +#define IQUERY ns_o_iquery +#define STATUS ns_o_status +#define NS_NOTIFY_OP ns_o_notify +#define NS_UPDATE_OP ns_o_update + +#define NOERROR ns_r_noerror +#define FORMERR ns_r_formerr +#define SERVFAIL ns_r_servfail +#define NXDOMAIN ns_r_nxdomain +#define NOTIMP ns_r_notimpl +#define REFUSED ns_r_refused +#define YXDOMAIN ns_r_yxdomain +#define YXRRSET ns_r_yxrrset +#define NXRRSET ns_r_nxrrset +#define NOTAUTH ns_r_notauth +#define NOTZONE ns_r_notzone +/*#define BADSIG ns_r_badsig*/ +/*#define BADKEY ns_r_badkey*/ +/*#define BADTIME ns_r_badtime*/ + + +#define DELETE ns_uop_delete +#define ADD ns_uop_add + +#define T_A ns_t_a +#define T_NS ns_t_ns +#define T_MD ns_t_md +#define T_MF ns_t_mf +#define T_CNAME ns_t_cname +#define T_SOA ns_t_soa +#define T_MB ns_t_mb +#define T_MG ns_t_mg +#define T_MR ns_t_mr +#define T_NULL ns_t_null +#define T_WKS ns_t_wks +#define T_PTR ns_t_ptr +#define T_HINFO ns_t_hinfo +#define T_MINFO ns_t_minfo +#define T_MX ns_t_mx +#define T_TXT ns_t_txt +#define T_RP ns_t_rp +#define T_AFSDB ns_t_afsdb +#define T_X25 ns_t_x25 +#define T_ISDN ns_t_isdn +#define T_RT ns_t_rt +#define T_NSAP ns_t_nsap +#define T_NSAP_PTR ns_t_nsap_ptr +#define T_SIG ns_t_sig +#define T_KEY ns_t_key +#define T_PX ns_t_px +#define T_GPOS ns_t_gpos +#define T_AAAA ns_t_aaaa +#define T_LOC ns_t_loc +#define T_NXT ns_t_nxt +#define T_EID ns_t_eid +#define T_NIMLOC ns_t_nimloc +#define T_SRV ns_t_srv +#define T_ATMA ns_t_atma +#define T_NAPTR ns_t_naptr +#define T_A6 ns_t_a6 +#define T_TSIG ns_t_tsig +#define T_IXFR ns_t_ixfr +#define T_AXFR ns_t_axfr +#define T_MAILB ns_t_mailb +#define T_MAILA ns_t_maila +#define T_ANY ns_t_any + +#define C_IN ns_c_in +#define C_CHAOS ns_c_chaos +#define C_HS ns_c_hs +/* BIND_UPDATE */ +#define C_NONE ns_c_none +#define C_ANY ns_c_any + +#define GETSHORT NS_GET16 +#define GETLONG NS_GET32 +#define PUTSHORT NS_PUT16 +#define PUTLONG NS_PUT32 + +#endif /* _ARPA_NAMESER_COMPAT_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/asm-generic/signal.h b/9/platforms/android-19/arch-mips64/usr/include/asm-generic/signal.h index c4c7e00..fe7d9a0 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/asm-generic/signal.h +++ b/9/platforms/android-19/arch-mips64/usr/include/asm-generic/signal.h @@ -19,10 +19,10 @@ #ifndef _UAPI__ASM_GENERIC_SIGNAL_H #define _UAPI__ASM_GENERIC_SIGNAL_H #include <linux/types.h> -#define _NSIG 64 +#define _KERNEL__NSIG 64 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define _NSIG_BPW __BITS_PER_LONG -#define _NSIG_WORDS (_NSIG / _NSIG_BPW) +#define _NSIG_WORDS (_KERNEL__NSIG / _NSIG_BPW) #define SIGHUP 1 #define SIGINT 2 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ @@ -68,7 +68,7 @@ /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define SIGRTMIN 32 #ifndef SIGRTMAX -#define SIGRTMAX _NSIG +#define SIGRTMAX _KERNEL__NSIG #endif /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define SA_NOCLDSTOP 0x00000001 diff --git a/9/platforms/android-19/arch-mips64/usr/include/asm/signal.h b/9/platforms/android-19/arch-mips64/usr/include/asm/signal.h index 771e31a..53f5015 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/asm/signal.h +++ b/9/platforms/android-19/arch-mips64/usr/include/asm/signal.h @@ -19,10 +19,10 @@ #ifndef _UAPI_ASM_SIGNAL_H #define _UAPI_ASM_SIGNAL_H #include <linux/types.h> -#define _NSIG 128 +#define _KERNEL__NSIG 128 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define _NSIG_BPW (sizeof(unsigned long) * 8) -#define _NSIG_WORDS (_NSIG / _NSIG_BPW) +#define _NSIG_WORDS (_KERNEL__NSIG / _NSIG_BPW) typedef struct { unsigned long sig[_NSIG_WORDS]; /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ @@ -72,7 +72,7 @@ typedef unsigned long old_sigset_t; #define SIGXFSZ 31 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define SIGRTMIN 32 -#define SIGRTMAX _NSIG +#define SIGRTMAX _KERNEL__NSIG #define SA_ONSTACK 0x08000000 #define SA_RESETHAND 0x80000000 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/dirent.h b/9/platforms/android-19/arch-mips64/usr/include/dirent.h index 129cdfa..bfe4ea4 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/dirent.h +++ b/9/platforms/android-19/arch-mips64/usr/include/dirent.h @@ -46,27 +46,33 @@ __BEGIN_DECLS #define DT_WHT 14 #endif -struct dirent { - uint64_t d_ino; - int64_t d_off; - unsigned short d_reclen; - unsigned char d_type; - char d_name[256]; -}; +#define __DIRENT64_BODY \ + uint64_t d_ino; \ + int64_t d_off; \ + unsigned short d_reclen; \ + unsigned char d_type; \ + char d_name[256]; \ + +struct dirent { __DIRENT64_BODY }; +struct dirent64 { __DIRENT64_BODY }; + #define d_fileno d_ino -#define dirent64 dirent typedef struct DIR DIR; extern DIR* opendir(const char*); extern DIR* fdopendir(int); extern struct dirent* readdir(DIR*); +extern struct dirent64* readdir64(DIR*); extern int readdir_r(DIR*, struct dirent*, struct dirent**); +extern int readdir64_r(DIR*, struct dirent64*, struct dirent64**); extern int closedir(DIR*); extern void rewinddir(DIR*); extern int dirfd(DIR*); extern int alphasort(const struct dirent**, const struct dirent**); +extern int alphasort64(const struct dirent64**, const struct dirent64**); extern int scandir(const char*, struct dirent***, int (*)(const struct dirent*), int (*)(const struct dirent**, const struct dirent**)); +extern int scandir64(const char*, struct dirent64***, int (*)(const struct dirent64*), int (*)(const struct dirent64**, const struct dirent64**)); extern int getdents(unsigned int, struct dirent*, unsigned int); __END_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/elf.h b/9/platforms/android-19/arch-mips64/usr/include/elf.h index 3f2e4f2..7a217b0 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/elf.h +++ b/9/platforms/android-19/arch-mips64/usr/include/elf.h @@ -28,33 +28,58 @@ #ifndef _ELF_H #define _ELF_H -#include <stdint.h> #include <linux/auxvec.h> +#include <linux/elf.h> +#include <linux/elf-em.h> -/* TODO: can we switch to <linux/elf.h> instead? http://b/12476126. */ -#include <sys/exec_elf.h> +#include <machine/elf_machdep.h> typedef struct { - uint32_t a_type; + __u32 a_type; union { - uint32_t a_val; + __u32 a_val; } a_un; } Elf32_auxv_t; typedef struct { - uint64_t a_type; + __u64 a_type; union { - uint64_t a_val; + __u64 a_val; } a_un; } Elf64_auxv_t; -#ifdef __LP64__ -# define Elf_auxv_t Elf64_auxv_t -#else -# define Elf_auxv_t Elf32_auxv_t -#endif +#define DF_ORIGIN 0x00000001 +#define DF_SYMBOLIC 0x00000002 +#define DF_TEXTREL 0x00000004 +#define DF_BIND_NOW 0x00000008 +#define DF_STATIC_TLS 0x00000010 -/* <sys/exec_elf.h> doesn't contain any NT_ constants. aarch64 strace needs this one. */ -#define NT_PRSTATUS 1 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +/* glibc and BSD disagree for DT_ENCODING; glibc looks wrong. */ +#define DT_PREINIT_ARRAY 32 +#define DT_PREINIT_ARRAYSZ 33 + +#define ELFOSABI_SYSV 0 /* Synonym for ELFOSABI_NONE used by valgrind. */ + +#define EM_ARM 40 +#define EM_AARCH64 183 + +#define PT_GNU_RELRO 0x6474e552 + +#define STB_LOOS 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +#define STT_LOOS 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 #endif /* _ELF_H */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/fcntl.h b/9/platforms/android-19/arch-mips64/usr/include/fcntl.h index b7b91f2..779a089 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/fcntl.h +++ b/9/platforms/android-19/arch-mips64/usr/include/fcntl.h @@ -41,12 +41,19 @@ __BEGIN_DECLS #define O_ASYNC FASYNC #endif +#define SYNC_FILE_RANGE_WAIT_BEFORE 1 +#define SYNC_FILE_RANGE_WRITE 2 +#define SYNC_FILE_RANGE_WAIT_AFTER 4 + extern int creat(const char*, mode_t); +extern int creat64(const char*, mode_t); extern int fallocate64(int, int, off64_t, off64_t); extern int fallocate(int, int, off_t, off_t); extern int fcntl(int, int, ...); extern int openat(int, const char*, int, ...); +extern int openat64(int, const char*, int, ...); extern int open(const char*, int, ...); +extern int open64(const char*, int, ...); extern int posix_fallocate64(int, off64_t, off64_t); extern int posix_fallocate(int, off_t, off_t); extern int unlinkat(int, const char*, int); diff --git a/9/platforms/android-19/arch-mips64/usr/include/fenv.h b/9/platforms/android-19/arch-mips64/usr/include/fenv.h index ed69cf8..6966e0d 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/fenv.h +++ b/9/platforms/android-19/arch-mips64/usr/include/fenv.h @@ -1,5 +1,8 @@ -/*- - * Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG> +/* $OpenBSD: fenv.h,v 1.2 2011/05/25 21:46:49 martynas Exp $ */ +/* $NetBSD: fenv.h,v 1.2.4.1 2011/02/08 16:18:55 bouyer Exp $ */ + +/* + * Copyright (c) 2010 The NetBSD Foundation, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -11,215 +14,56 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD: src/lib/msun/arm/fenv.h,v 1.5 2005/03/16 19:03:45 das Exp $ - */ - -/* - Rewritten for Android. -*/ - -/* MIPS FPU floating point control register bits. - * - * 31-25 -> floating point conditions code bits set by FP compare - * instructions - * 24 -> flush denormalized results to zero instead of - * causing unimplemented operation exception. - * 23 -> Condition bit - * 22 -> In conjunction with FS detects denormalized - * operands and replaces them internally with 0. - * 21 -> In conjunction with FS forces denormalized operands - * to the closest normalized value. - * 20-18 -> reserved (read as 0, write with 0) - * 17 -> cause bit for unimplemented operation - * 16 -> cause bit for invalid exception - * 15 -> cause bit for division by zero exception - * 14 -> cause bit for overflow exception - * 13 -> cause bit for underflow exception - * 12 -> cause bit for inexact exception - * 11 -> enable exception for invalid exception - * 10 -> enable exception for division by zero exception - * 9 -> enable exception for overflow exception - * 8 -> enable exception for underflow exception - * 7 -> enable exception for inexact exception - * 6 -> flag invalid exception - * 5 -> flag division by zero exception - * 4 -> flag overflow exception - * 3 -> flag underflow exception - * 2 -> flag inexact exception - * 1-0 -> rounding control - * - * - * Rounding Control: - * 00 - rounding to nearest (RN) - * 01 - rounding toward zero (RZ) - * 10 - rounding (up) toward plus infinity (RP) - * 11 - rounding (down)toward minus infinity (RM) + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ #ifndef _FENV_H_ #define _FENV_H_ -#include <sys/types.h> +#include <sys/cdefs.h> +#include <machine/fenv.h> __BEGIN_DECLS -typedef __uint32_t fenv_t; -typedef __uint32_t fexcept_t; - -/* Exception flags */ -#define FE_INVALID 0x40 -#define FE_DIVBYZERO 0x20 -#define FE_OVERFLOW 0x10 -#define FE_UNDERFLOW 0x08 -#define FE_INEXACT 0x04 -#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \ - FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW) -#define _FCSR_CAUSE_SHIFT 10 -#define _ENABLE_SHIFT 5 -#define _FCSR_ENABLE_MASK (FE_ALL_EXCEPT << _ENABLE_SHIFT) - -/* Rounding modes */ -#define FE_TONEAREST 0x0000 -#define FE_TOWARDZERO 0x0001 -#define FE_UPWARD 0x0002 -#define FE_DOWNWARD 0x0003 -#define _FCSR_RMODE_SHIFT 0 -#define _FCSR_RMASK 0x3 -/* Default floating-point environment */ -extern const fenv_t __fe_dfl_env; -#define FE_DFL_ENV (&__fe_dfl_env) - -static __inline int fegetenv(fenv_t* __envp) { - fenv_t _fcsr = 0; -#ifdef __mips_hard_float - __asm__ __volatile__("cfc1 %0,$31" : "=r" (_fcsr)); -#endif - *__envp = _fcsr; - return 0; -} - -static __inline int fesetenv(const fenv_t* __envp) { - fenv_t _fcsr = *__envp; -#ifdef __mips_hard_float - __asm__ __volatile__("ctc1 %0,$31" : : "r" (_fcsr)); -#endif - return 0; -} +int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int feraiseexcept(int); +int fesetexceptflag(const fexcept_t *, int); +int fetestexcept(int); -static __inline int feclearexcept(int __excepts) { - fexcept_t __fcsr; - fegetenv(&__fcsr); - __excepts &= FE_ALL_EXCEPT; - __fcsr &= ~(__excepts | (__excepts << _FCSR_CAUSE_SHIFT)); - fesetenv(&__fcsr); - return 0; -} +int fegetround(void); +int fesetround(int); -static __inline int fegetexceptflag(fexcept_t* __flagp, int __excepts) { - fexcept_t __fcsr; - fegetenv(&__fcsr); - *__flagp = __fcsr & __excepts & FE_ALL_EXCEPT; - return 0; -} +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); -static __inline int fesetexceptflag(const fexcept_t* __flagp, int __excepts) { - fexcept_t __fcsr; - fegetenv(&__fcsr); - /* Ensure that flags are all legal */ - __excepts &= FE_ALL_EXCEPT; - __fcsr &= ~__excepts; - __fcsr |= *__flagp & __excepts; - fesetenv(&__fcsr); - return 0; -} +int feenableexcept(int); +int fedisableexcept(int); +int fegetexcept(void); -static __inline int feraiseexcept(int __excepts) { - fexcept_t __fcsr; - fegetenv(&__fcsr); - /* Ensure that flags are all legal */ - __excepts &= FE_ALL_EXCEPT; - /* Cause bit needs to be set as well for generating the exception*/ - __fcsr |= __excepts | (__excepts << _FCSR_CAUSE_SHIFT); - fesetenv(&__fcsr); - return 0; -} - -static __inline int fetestexcept(int __excepts) { - fexcept_t __FCSR; - fegetenv(&__FCSR); - return (__FCSR & __excepts & FE_ALL_EXCEPT); -} - -static __inline int fegetround(void) { - fenv_t _fcsr; - fegetenv(&_fcsr); - return (_fcsr & _FCSR_RMASK); -} - -static __inline int fesetround(int __round) { - fenv_t _fcsr; - fegetenv(&_fcsr); - _fcsr &= ~_FCSR_RMASK; - _fcsr |= (__round & _FCSR_RMASK ) ; - fesetenv(&_fcsr); - return 0; -} - -static __inline int feholdexcept(fenv_t* __envp) { - fenv_t __env; - fegetenv(&__env); - *__envp = __env; - __env &= ~(FE_ALL_EXCEPT | _FCSR_ENABLE_MASK); - fesetenv(&__env); - return 0; -} - -static __inline int feupdateenv(const fenv_t* __envp) { - fexcept_t __fcsr; - fegetenv(&__fcsr); - fesetenv(__envp); - feraiseexcept(__fcsr & FE_ALL_EXCEPT); - return 0; -} - -#if __BSD_VISIBLE - -static __inline int feenableexcept(int __mask) { - fenv_t __old_fcsr, __new_fcsr; - fegetenv(&__old_fcsr); - __new_fcsr = __old_fcsr | (__mask & FE_ALL_EXCEPT) << _ENABLE_SHIFT; - fesetenv(&__new_fcsr); - return ((__old_fcsr >> _ENABLE_SHIFT) & FE_ALL_EXCEPT); -} - -static __inline int fedisableexcept(int __mask) { - fenv_t __old_fcsr, __new_fcsr; - fegetenv(&__old_fcsr); - __new_fcsr = __old_fcsr & ~((__mask & FE_ALL_EXCEPT) << _ENABLE_SHIFT); - fesetenv(&__new_fcsr); - return ((__old_fcsr >> _ENABLE_SHIFT) & FE_ALL_EXCEPT); -} - -static __inline int fegetexcept(void) { - fenv_t __fcsr; - fegetenv(&__fcsr); - return ((__fcsr & _FCSR_ENABLE_MASK) >> _ENABLE_SHIFT); -} - -#endif /* __BSD_VISIBLE */ +/* + * The following constant represents the default floating-point environment + * (that is, the one installed at program startup) and has type pointer to + * const-qualified fenv_t. + * + * It can be used as an argument to the functions that manage the floating-point + * environment, namely fesetenv() and feupdateenv(). + */ +extern const fenv_t __fe_dfl_env; +#define FE_DFL_ENV (&__fe_dfl_env) __END_DECLS -#endif /* !_FENV_H_ */ +#endif /* ! _FENV_H_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/ftw.h b/9/platforms/android-19/arch-mips64/usr/include/ftw.h index 3bebea3..af524d0 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/ftw.h +++ b/9/platforms/android-19/arch-mips64/usr/include/ftw.h @@ -57,6 +57,9 @@ __BEGIN_DECLS int ftw(const char *, int (*)(const char *, const struct stat *, int), int); int nftw(const char *, int (*)(const char *, const struct stat *, int, struct FTW *), int, int); +int ftw64(const char *, int (*)(const char *, const struct stat64 *, int), int); +int nftw64(const char *, int (*)(const char *, const struct stat64 *, int, + struct FTW *), int, int); __END_DECLS #endif /* !_FTW_H */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/limits.h b/9/platforms/android-19/arch-mips64/usr/include/limits.h index b9d4354..471d380 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/limits.h +++ b/9/platforms/android-19/arch-mips64/usr/include/limits.h @@ -105,9 +105,15 @@ #define ULONG_LONG_MAX ULLONG_MAX #endif +/* New code should use sysconf(_SC_PAGE_SIZE) instead. */ +#ifndef PAGE_SIZE +#define PAGE_SIZE 4096 +#endif #ifndef PAGESIZE -#include <asm/page.h> #define PAGESIZE PAGE_SIZE #endif +/* glibc's PAGE_MASK is the bitwise negation of BSD's! TODO: remove? */ +#define PAGE_MASK (~(PAGE_SIZE - 1)) + #endif /* !_LIMITS_H_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/link.h b/9/platforms/android-19/arch-mips64/usr/include/link.h index 341fbf1..cb8e139 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/link.h +++ b/9/platforms/android-19/arch-mips64/usr/include/link.h @@ -33,7 +33,11 @@ __BEGIN_DECLS -#define ElfW(type) Elf_##type +#if __LP64__ +#define ElfW(type) Elf64_ ## type +#else +#define ElfW(type) Elf32_ ## type +#endif struct dl_phdr_info { ElfW(Addr) dlpi_addr; @@ -42,13 +46,35 @@ struct dl_phdr_info { ElfW(Half) dlpi_phnum; }; -int dl_iterate_phdr(int (*cb)(struct dl_phdr_info*, size_t, void*), void*); +int dl_iterate_phdr(int (*)(struct dl_phdr_info*, size_t, void*), void*); #ifdef __arm__ typedef long unsigned int* _Unwind_Ptr; -_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount); +_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr, int*); #endif +/* Used by the dynamic linker to communicate with the debugger. */ +struct link_map { + ElfW(Addr) l_addr; + char* l_name; + ElfW(Dyn)* l_ld; + struct link_map* l_next; + struct link_map* l_prev; +}; + +/* Used by the dynamic linker to communicate with the debugger. */ +struct r_debug { + int32_t r_version; + struct link_map* r_map; + ElfW(Addr) r_brk; + enum { + RT_CONSISTENT, + RT_ADD, + RT_DELETE + } r_state; + ElfW(Addr) r_ldbase; +}; + __END_DECLS #endif /* _LINK_H_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/locale.h b/9/platforms/android-19/arch-mips64/usr/include/locale.h index 65b5c7d..b6dbfdb 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/locale.h +++ b/9/platforms/android-19/arch-mips64/usr/include/locale.h @@ -49,11 +49,13 @@ enum { LC_IDENTIFICATION = 12 }; -extern char *setlocale(int category, const char *locale); +extern char* setlocale(int, const char*); -/* Make libstdc++-v3 happy. */ +#if !defined(__LP64__) +// TODO: LP32 had these bogus declarations but LP64 should have a real struct lconv and localeconv(3). struct lconv { }; -struct lconv *localeconv(void); +struct lconv* localeconv(void); +#endif __END_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/machine/asm.h b/9/platforms/android-19/arch-mips64/usr/include/machine/asm.h index eabb1bf..5eacde3 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/machine/asm.h +++ b/9/platforms/android-19/arch-mips64/usr/include/machine/asm.h @@ -28,25 +28,24 @@ #ifndef _MIPS64_ASM_H #define _MIPS64_ASM_H -#include <machine/regdef.h> - -#ifdef NEED_OLD_RM7KFIX -#define ITLBNOPFIX nop;nop;nop;nop;nop;nop;nop;nop;nop;nop; -#else -#define ITLBNOPFIX nop;nop;nop;nop +#ifndef _ALIGN_TEXT +# define _ALIGN_TEXT .align 4 #endif +#undef __bionic_asm_custom_entry +#undef __bionic_asm_custom_end +#define __bionic_asm_custom_entry(f) .ent f +#define __bionic_asm_custom_end(f) .end f + +#include <machine/regdef.h> + #define _MIPS_ISA_MIPS1 1 /* R2000/R3000 */ #define _MIPS_ISA_MIPS2 2 /* R4000/R6000 */ #define _MIPS_ISA_MIPS3 3 /* R4000 */ #define _MIPS_ISA_MIPS4 4 /* TFP (R1x000) */ -#ifdef __linux__ #define _MIPS_ISA_MIPS5 5 #define _MIPS_ISA_MIPS32 6 #define _MIPS_ISA_MIPS64 7 -#else -#define _MIPS_ISA_MIPS32 32 /* MIPS32 */ -#endif #if !defined(ABICALLS) && !defined(_NO_ABICALLS) #define ABICALLS .abicalls @@ -56,8 +55,6 @@ ABICALLS #endif -#define _C_LABEL(x) x /* XXX Obsolete but keep for a while */ - #if !defined(__MIPSEL__) && !defined(__MIPSEB__) #error "__MIPSEL__ or __MIPSEB__ must be defined" #endif @@ -90,15 +87,6 @@ */ #if defined(ABICALLS) && !defined(_KERNEL) && !defined(_STANDALONE) -#ifndef _MIPS_SIM -#define _MIPS_SIM 1 -#define _ABIO32 1 -#endif -#ifndef _MIPS_ISA -#define _MIPS_ISA 2 -#define _MIPS_ISA_MIPS2 2 -#endif - #if (_MIPS_SIM == _ABIO32) || (_MIPS_SIM == _ABI32) #define NARGSAVE 4 @@ -190,28 +178,6 @@ #endif /* - * Define -pg profile entry code. - */ -#if defined(XGPROF) || defined(XPROF) -#define MCOUNT \ - PTR_SUBU sp, sp, 64; \ - SAVE_GP(16); \ - sd ra, 56(sp); \ - sd gp, 48(sp); \ - .set noat; \ - .set noreorder; \ - move AT, ra; \ - jal _mcount; \ - PTR_SUBU sp, sp, 16; \ - ld ra, 56(sp); \ - PTR_ADDU sp, sp, 64; \ - .set reorder; \ - .set at; -#else -#define MCOUNT -#endif - -/* * LEAF(x, fsize) * * Declare a leaf routine. @@ -221,26 +187,9 @@ .globl x; \ .ent x, 0; \ x: ; \ + .cfi_startproc; \ .frame sp, fsize, ra; \ SETUP_GP \ - MCOUNT - -#define ALEAF(x) \ - .globl x; \ -x: - -/* - * NLEAF(x) - * - * Declare a non-profiled leaf routine. - */ -#define NLEAF(x, fsize) \ - .align 3; \ - .globl x; \ - .ent x, 0; \ -x: ; \ - .frame sp, fsize, ra; \ - SETUP_GP /* * NON_LEAF(x) @@ -252,54 +201,8 @@ x: ; \ .globl x; \ .ent x, 0; \ x: ; \ + .cfi_startproc; \ .frame sp, fsize, retpc; \ SETUP_GP \ - MCOUNT - -/* - * NNON_LEAF(x) - * - * Declare a non-profiled non-leaf routine - * (a routine that makes other C calls). - */ -#define NNON_LEAF(x, fsize, retpc) \ - .align 3; \ - .globl x; \ - .ent x, 0; \ -x: ; \ - .frame sp, fsize, retpc \ - SETUP_GP - -/* - * END(x) - * - * Mark end of a procedure. - */ -#define END(x) \ - .end x - -/* - * Macros to panic and printf from assembly language. - */ -#define PANIC(msg) \ - LA a0, 9f; \ - jal panic; \ - nop ; \ - MSG(msg) - -#define PRINTF(msg) \ - LA a0, 9f; \ - jal printf; \ - nop ; \ - MSG(msg) - -#define MSG(msg) \ - .rdata; \ -9: .asciiz msg; \ - .text - -#define ASMSTR(str) \ - .asciiz str; \ - .align 3 #endif /* !_MIPS_ASM_H */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/machine/fenv.h b/9/platforms/android-19/arch-mips64/usr/include/machine/fenv.h new file mode 100644 index 0000000..37f0f9c --- /dev/null +++ b/9/platforms/android-19/arch-mips64/usr/include/machine/fenv.h @@ -0,0 +1,105 @@ +/*- + * Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/lib/msun/arm/fenv.h,v 1.5 2005/03/16 19:03:45 das Exp $ + */ + +/* + Rewritten for Android. +*/ + +/* MIPS FPU floating point control register bits. + * + * 31-25 -> floating point conditions code bits set by FP compare + * instructions + * 24 -> flush denormalized results to zero instead of + * causing unimplemented operation exception. + * 23 -> Condition bit + * 22 -> In conjunction with FS detects denormalized + * operands and replaces them internally with 0. + * 21 -> In conjunction with FS forces denormalized operands + * to the closest normalized value. + * 20-18 -> reserved (read as 0, write with 0) + * 17 -> cause bit for unimplemented operation + * 16 -> cause bit for invalid exception + * 15 -> cause bit for division by zero exception + * 14 -> cause bit for overflow exception + * 13 -> cause bit for underflow exception + * 12 -> cause bit for inexact exception + * 11 -> enable exception for invalid exception + * 10 -> enable exception for division by zero exception + * 9 -> enable exception for overflow exception + * 8 -> enable exception for underflow exception + * 7 -> enable exception for inexact exception + * 6 -> flag invalid exception + * 5 -> flag division by zero exception + * 4 -> flag overflow exception + * 3 -> flag underflow exception + * 2 -> flag inexact exception + * 1-0 -> rounding control + * + * + * Rounding Control: + * 00 - rounding to nearest (RN) + * 01 - rounding toward zero (RZ) + * 10 - rounding (up) toward plus infinity (RP) + * 11 - rounding (down)toward minus infinity (RM) + */ + +#ifndef _MIPS_FENV_H_ +#define _MIPS_FENV_H_ + +#include <sys/types.h> + +__BEGIN_DECLS + +typedef __uint32_t fenv_t; +typedef __uint32_t fexcept_t; + +/* Exception flags */ +#define FE_INVALID 0x40 +#define FE_DIVBYZERO 0x20 +#define FE_OVERFLOW 0x10 +#define FE_UNDERFLOW 0x08 +#define FE_INEXACT 0x04 +#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_INEXACT | \ + FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW) + +#define _FCSR_CAUSE_SHIFT 10 +#define _ENABLE_SHIFT 5 +#define _FCSR_ENABLE_MASK (FE_ALL_EXCEPT << _ENABLE_SHIFT) + +/* Rounding modes */ +#define FE_TONEAREST 0x0000 +#define FE_TOWARDZERO 0x0001 +#define FE_UPWARD 0x0002 +#define FE_DOWNWARD 0x0003 + +#define _FCSR_RMODE_SHIFT 0 +#define _FCSR_RMASK 0x3 + +__END_DECLS + +#endif /* !_MIPS_FENV_H_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/machine/signal.h b/9/platforms/android-19/arch-mips64/usr/include/machine/signal.h index 4efb856..b31715c 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/machine/signal.h +++ b/9/platforms/android-19/arch-mips64/usr/include/machine/signal.h @@ -37,111 +37,15 @@ #ifndef _MIPS_SIGNAL_H_ #define _MIPS_SIGNAL_H_ -#include <sys/cdefs.h> - -#if !defined(__LANGUAGE_ASSEMBLY) -#include <sys/types.h> - -/* - * Machine-dependent signal definitions - */ -typedef int sig_atomic_t; - -#if __BSD_VISIBLE || __XPG_VISIBLE >= 420 - -/* - * Information pushed on stack when a signal is delivered. - * This is used by the kernel to restore state following - * execution of the signal handler. It is also made available - * to the handler to allow it to restore state properly if - * a non-standard exit is performed. - */ - -#if defined(__ANDROID__) - -/* - * The Linux and OpenBSD sigcontext structures are slightly different - * This is the Linux O32 ABI compatible sigcontext - */ - -struct sigcontext { - unsigned int sc_regmask; - unsigned int sc_status; - unsigned long long sc_pc; - unsigned long long sc_regs[32]; - unsigned long long sc_fpregs[32]; - unsigned int sc_acx; - unsigned int sc_fpc_csr; - unsigned int sc_fpc_eir; - unsigned int sc_used_math; - unsigned int sc_dsp; - unsigned long long sc_mdhi; - unsigned long long sc_mdlo; - unsigned long sc_hi1; - unsigned long sc_lo1; - unsigned long sc_hi2; - unsigned long sc_lo2; - unsigned long sc_hi3; - unsigned long sc_lo3; -}; - -#else - -struct sigcontext { - long sc_onstack; /* sigstack state to restore */ - long sc_mask; /* signal mask to restore */ - __register_t sc_pc; /* pc at time of signal */ - __register_t sc_regs[32]; /* processor regs 0 to 31 */ - __register_t mullo; /* mullo and mulhi registers... */ - __register_t mulhi; /* mullo and mulhi registers... */ - f_register_t sc_fpregs[33]; /* fp regs 0 to 31 and csr */ - long sc_fpused; /* fp has been used */ - long sc_fpc_eir; /* floating point exception instruction reg */ - long xxx[8]; /* XXX reserved */ -}; -#endif -#endif /* __BSD_VISIBLE || __XPG_VISIBLE >= 420 */ - -#else /* __LANGUAGE_ASSEMBLY */ - -#ifdef __ANDROID__ - #define SC_REGMASK (0*REGSZ) #define SC_STATUS (1*REGSZ) #define SC_PC (2*REGSZ) #define SC_REGS (SC_PC+8) #define SC_FPREGS (SC_REGS+32*8) #define SC_ACX (SC_FPREGS+32*REGSZ_FP) -#define SC_FPC_CSR (SC_ACX+1*REGSZ) -#define SC_FPC_EIR (SC_ACX+2*REGSZ) #define SC_USED_MATH (SC_ACX+3*REGSZ) -#define SC_DSP (SC_ACX+4*REGSZ) -#define SC_MDHI (SC_ACX+5*REGSZ) -#define SC_MDLO (SC_MDHI+8) -#define SC_HI1 (SC_MDLO+8) -#define SC_LO1 (SC_HI1+1*REGSZ) -#define SC_HI2 (SC_HI1+2*REGSZ) -#define SC_LO2 (SC_HI1+3*REGSZ) -#define SC_HI3 (SC_HI1+4*REGSZ) -#define SC_LO3 (SC_HI1+5*REGSZ) /* OpenBSD compatibility */ #define SC_MASK SC_REGMASK #define SC_FPUSED SC_USED_MATH -#else - -#define SC_ONSTACK (0 * REGSZ) -#define SC_MASK (1 * REGSZ) -#define SC_PC (2 * REGSZ) -#define SC_REGS (3 * REGSZ) -#define SC_MULLO (35 * REGSZ) -#define SC_MULHI (36 * REGSZ) -#define SC_FPREGS (37 * REGSZ) -#define SC_FPUSED (70 * REGSZ) -#define SC_FPC_EIR (71 * REGSZ) - -#endif /* __ANDROID__ */ - -#endif /* __LANGUAGE_ASSEMBLY */ - #endif /* !_MIPS_SIGNAL_H_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/math.h b/9/platforms/android-19/arch-mips64/usr/include/math.h index b13eca9..bd0241b 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/math.h +++ b/9/platforms/android-19/arch-mips64/usr/include/math.h @@ -18,7 +18,6 @@ #define _MATH_H_ #include <sys/cdefs.h> -#include <sys/_types.h> #include <limits.h> /* @@ -124,8 +123,10 @@ extern const union __nan_un { : (sizeof (x) == sizeof (double)) ? __signbit(x) \ : __signbitl(x)) -typedef __double_t double_t; -typedef __float_t float_t; +typedef double __double_t; +typedef __double_t double_t; +typedef float __float_t; +typedef __float_t float_t; #endif /* __ISO_C_VISIBLE >= 1999 */ /* diff --git a/9/platforms/android-19/arch-mips64/usr/include/pthread.h b/9/platforms/android-19/arch-mips64/usr/include/pthread.h index c5380be..f93f9e9 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/pthread.h +++ b/9/platforms/android-19/arch-mips64/usr/include/pthread.h @@ -127,11 +127,13 @@ int pthread_attr_setschedparam(pthread_attr_t*, const struct sched_param*) __non int pthread_attr_setschedpolicy(pthread_attr_t*, int) __nonnull((1)); int pthread_attr_setscope(pthread_attr_t*, int) __nonnull((1)); int pthread_attr_setstack(pthread_attr_t*, void*, size_t) __nonnull((1)); -int pthread_attr_setstacksize(pthread_attr_t * attr, size_t stack_size) __nonnull((1)); +int pthread_attr_setstacksize(pthread_attr_t*, size_t stack_size) __nonnull((1)); int pthread_condattr_destroy(pthread_condattr_t*) __nonnull((1)); +int pthread_condattr_getclock(const pthread_condattr_t*, clockid_t*) __nonnull((1, 2)); int pthread_condattr_getpshared(const pthread_condattr_t*, int*) __nonnull((1, 2)); int pthread_condattr_init(pthread_condattr_t*) __nonnull((1)); +int pthread_condattr_setclock(pthread_condattr_t*, clockid_t) __nonnull((1)); int pthread_condattr_setpshared(pthread_condattr_t*, int) __nonnull((1)); int pthread_cond_broadcast(pthread_cond_t*) __nonnull((1)); @@ -172,7 +174,7 @@ int pthread_mutexattr_settype(pthread_mutexattr_t*, int) __nonnull((1)); int pthread_mutex_destroy(pthread_mutex_t*) __nonnull((1)); int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) __nonnull((1)); int pthread_mutex_lock(pthread_mutex_t*) __nonnull((1)); -int pthread_mutex_timedlock(pthread_mutex_t*, struct timespec*) __nonnull((1, 2)); +int pthread_mutex_timedlock(pthread_mutex_t*, const struct timespec*) __nonnull((1, 2)); int pthread_mutex_trylock(pthread_mutex_t*) __nonnull((1)); int pthread_mutex_unlock(pthread_mutex_t*) __nonnull((1)); @@ -232,32 +234,17 @@ extern void __pthread_cleanup_pop(__pthread_cleanup_t*, int); #if !defined(__LP64__) -/* Deprecated by POSIX. TODO: support for LP64 but add deprecated attribute instead? */ -int pthread_attr_getstackaddr(const pthread_attr_t*, void**) __nonnull((1, 2)); /* deprecated */ -int pthread_attr_setstackaddr(pthread_attr_t*, void*) __nonnull((1)); /* deprecated */ - -/* Bionic additions that are deprecated even in the 32-bit ABI. */ +// Bionic additions that are deprecated even in the 32-bit ABI. +// +// TODO: Remove them once chromium_org / NFC have switched over. int pthread_cond_timedwait_monotonic_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); int pthread_cond_timedwait_monotonic(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); -#define HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC 1 - -/* - * Like pthread_cond_timedwait except 'reltime' is relative to the current time. - * TODO: not like glibc; include in LP64? - */ -int pthread_cond_timedwait_relative_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); -#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE 1 -/* TODO: not like glibc; include in LP64? */ -int pthread_cond_timeout_np(pthread_cond_t*, pthread_mutex_t*, unsigned); +int pthread_cond_timedwait_relative_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*) /* TODO: __attribute__((deprecated("use pthread_cond_timedwait instead")))*/; +#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE 1 /* TODO: stop defining this to push LP32 off this API sooner. */ +int pthread_cond_timeout_np(pthread_cond_t*, pthread_mutex_t*, unsigned) /* TODO: __attribute__((deprecated("use pthread_cond_timedwait instead")))*/; -/* Like pthread_mutex_lock(), but will wait up to 'msecs' milli-seconds - * before returning. Same return values as pthread_mutex_trylock though, i.e. - * returns EBUSY if the lock could not be acquired after the timeout expired. - * - * TODO: replace with pthread_mutex_timedlock_np for LP64. - */ -int pthread_mutex_lock_timeout_np(pthread_mutex_t*, unsigned); +int pthread_mutex_lock_timeout_np(pthread_mutex_t*, unsigned) __attribute__((deprecated("use pthread_mutex_timedlock instead"))); #endif /* !defined(__LP64__) */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/search.h b/9/platforms/android-19/arch-mips64/usr/include/search.h index e12e49e..1301a08 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/search.h +++ b/9/platforms/android-19/arch-mips64/usr/include/search.h @@ -10,7 +10,6 @@ #define _SEARCH_H_ #include <sys/cdefs.h> -#include <sys/_types.h> typedef enum { preorder, diff --git a/9/platforms/android-19/arch-mips64/usr/include/signal.h b/9/platforms/android-19/arch-mips64/usr/include/signal.h index 0159bf2..267f3e6 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/signal.h +++ b/9/platforms/android-19/arch-mips64/usr/include/signal.h @@ -51,20 +51,23 @@ __BEGIN_DECLS typedef int sig_atomic_t; -/* TODO: 64-bit: we should probably #undef the uapi NSIG and add a unit test that NSIG == _NSIG && NSIG >= 64. */ -#ifndef _NSIG -# define _NSIG 64 -#endif -#ifndef NSIG -# define NSIG _NSIG +/* The arm and x86 kernel header files don't define _NSIG. */ +#ifndef _KERNEL__NSIG +#define _KERNEL__NSIG 64 #endif +/* Userspace's NSIG is the kernel's _NSIG + 1. */ +#define _NSIG (_KERNEL__NSIG + 1) +#define NSIG _NSIG + extern const char* const sys_siglist[]; -extern const char* const sys_signame[]; +extern const char* const sys_signame[]; /* BSD compatibility. */ typedef __sighandler_t sig_t; /* BSD compatibility. */ typedef __sighandler_t sighandler_t; /* glibc compatibility. */ +#define si_timerid si_tid /* glibc compatibility. */ + #if defined(__LP64__) struct sigaction { diff --git a/9/platforms/android-19/arch-mips64/usr/include/stdint.h b/9/platforms/android-19/arch-mips64/usr/include/stdint.h index be49485..1f3d003 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/stdint.h +++ b/9/platforms/android-19/arch-mips64/usr/include/stdint.h @@ -30,7 +30,28 @@ #define _STDINT_H #include <stddef.h> -#include <sys/_types.h> + +typedef __signed char __int8_t; +typedef unsigned char __uint8_t; +typedef short __int16_t; +typedef unsigned short __uint16_t; +typedef int __int32_t; +typedef unsigned int __uint32_t; +#if __LP64__ +typedef long __int64_t; +typedef unsigned long __uint64_t; +#else +typedef long long __int64_t; +typedef unsigned long long __uint64_t; +#endif + +#if __LP64__ +typedef long __intptr_t; +typedef unsigned long __uintptr_t; +#else +typedef int __intptr_t; +typedef unsigned int __uintptr_t; +#endif typedef __int8_t int8_t; typedef __uint8_t uint8_t; @@ -44,40 +65,41 @@ typedef __uint32_t uint32_t; typedef __int64_t int64_t; typedef __uint64_t uint64_t; -typedef int8_t int_least8_t; -typedef int8_t int_fast8_t; +typedef __intptr_t intptr_t; +typedef __uintptr_t uintptr_t; +typedef int8_t int_least8_t; typedef uint8_t uint_least8_t; -typedef uint8_t uint_fast8_t; typedef int16_t int_least16_t; -typedef int32_t int_fast16_t; - typedef uint16_t uint_least16_t; -typedef uint32_t uint_fast16_t; typedef int32_t int_least32_t; -typedef int32_t int_fast32_t; - typedef uint32_t uint_least32_t; -typedef uint32_t uint_fast32_t; typedef int64_t int_least64_t; -typedef int64_t int_fast64_t; - typedef uint64_t uint_least64_t; + +typedef int8_t int_fast8_t; +typedef uint8_t uint_fast8_t; + +typedef int64_t int_fast64_t; typedef uint64_t uint_fast64_t; #ifdef __LP64__ -typedef long intptr_t; -typedef unsigned long uintptr_t; +typedef int64_t int_fast16_t; +typedef uint64_t uint_fast16_t; +typedef int64_t int_fast32_t; +typedef uint64_t uint_fast32_t; #else -typedef int intptr_t; -typedef unsigned int uintptr_t; +typedef int32_t int_fast16_t; +typedef uint32_t uint_fast16_t; +typedef int32_t int_fast32_t; +typedef uint32_t uint_fast32_t; #endif -typedef uint64_t uintmax_t; -typedef int64_t intmax_t; +typedef uint64_t uintmax_t; +typedef int64_t intmax_t; /* Keep the kernel from trying to define these types... */ #define __BIT_TYPES_DEFINED__ diff --git a/9/platforms/android-19/arch-mips64/usr/include/stdio.h b/9/platforms/android-19/arch-mips64/usr/include/stdio.h index c241d94..7d30b38 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/stdio.h +++ b/9/platforms/android-19/arch-mips64/usr/include/stdio.h @@ -359,83 +359,6 @@ __END_DECLS #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) #endif /* __BSD_VISIBLE */ -/* - * Functions internal to the implementation. - */ -__BEGIN_DECLS -int __srget(FILE *); -int __swbuf(int, FILE *); -__END_DECLS - -/* - * The __sfoo macros are here so that we can - * define function versions in the C library. - */ -#define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++)) -#if defined(__GNUC__) -static __inline int __sputc(int _c, FILE *_p) { - if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) - return (*_p->_p++ = _c); - else - return (__swbuf(_c, _p)); -} -#else -/* - * This has been tuned to generate reasonable code on the vax using pcc. - */ -#define __sputc(c, p) \ - (--(p)->_w < 0 ? \ - (p)->_w >= (p)->_lbfsize ? \ - (*(p)->_p = (c)), *(p)->_p != '\n' ? \ - (int)*(p)->_p++ : \ - __swbuf('\n', p) : \ - __swbuf((int)(c), p) : \ - (*(p)->_p = (c), (int)*(p)->_p++)) -#endif - -#define __sfeof(p) (((p)->_flags & __SEOF) != 0) -#define __sferror(p) (((p)->_flags & __SERR) != 0) -#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) -#define __sfileno(p) ((p)->_file) - -extern int __isthreaded; - -#define feof(p) (!__isthreaded ? __sfeof(p) : (feof)(p)) -#define ferror(p) (!__isthreaded ? __sferror(p) : (ferror)(p)) -#define clearerr(p) (!__isthreaded ? __sclearerr(p) : (clearerr)(p)) - -#if __POSIX_VISIBLE -#define fileno(p) (!__isthreaded ? __sfileno(p) : (fileno)(p)) -#endif - -#define getc(fp) (!__isthreaded ? __sgetc(fp) : (getc)(fp)) - -#if __BSD_VISIBLE -/* - * The macro implementations of putc and putc_unlocked are not - * fully POSIX compliant; they do not set errno on failure - */ -#define putc(x, fp) (!__isthreaded ? __sputc(x, fp) : (putc)(x, fp)) -#endif /* __BSD_VISIBLE */ - -#ifndef lint -#if __POSIX_VISIBLE >= 199506 -#define getc_unlocked(fp) __sgetc(fp) -/* - * The macro implementations of putc and putc_unlocked are not - * fully POSIX compliant; they do not set errno on failure - */ -#if __BSD_VISIBLE -#define putc_unlocked(x, fp) __sputc(x, fp) -#endif /* __BSD_VISIBLE */ -#endif /* __POSIX_VISIBLE >= 199506 */ -#endif /* lint */ - -#define getchar() getc(stdin) -#define putchar(x) putc(x, stdout) -#define getchar_unlocked() getc_unlocked(stdin) -#define putchar_unlocked(c) putc_unlocked(c, stdout) - #ifdef _GNU_SOURCE /* * glibc defines dprintf(int, const char*, ...), which is poorly named @@ -470,8 +393,10 @@ int vsprintf(char *dest, const char *format, __va_list ap) } #if defined(__clang__) +#if !defined(WITH_SYNTAX_CHECK) #define __wrap_snprintf(dest, size, ...) __builtin___snprintf_chk(dest, size, 0, __bos(dest), __VA_ARGS__) #define snprintf(...) __wrap_snprintf(__VA_ARGS__) +#endif #else __BIONIC_FORTIFY_INLINE __printflike(3, 4) @@ -483,8 +408,10 @@ int snprintf(char *dest, size_t size, const char *format, ...) #endif #if defined(__clang__) +#if !defined(WITH_SYNTAX_CHECK) #define __wrap_sprintf(dest, ...) __builtin___sprintf_chk(dest, 0, __bos(dest), __VA_ARGS__) #define sprintf(...) __wrap_sprintf(__VA_ARGS__) +#endif #else __BIONIC_FORTIFY_INLINE __printflike(2, 3) diff --git a/9/platforms/android-19/arch-mips64/usr/include/stdlib.h b/9/platforms/android-19/arch-mips64/usr/include/stdlib.h index 72b554f..9b7e6d1 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/stdlib.h +++ b/9/platforms/android-19/arch-mips64/usr/include/stdlib.h @@ -54,28 +54,23 @@ extern int clearenv(void); extern char* mkdtemp(char*); extern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp"); extern int mkstemp(char*); +extern int mkstemp64(char*); extern long strtol(const char *, char **, int); extern long long strtoll(const char *, char **, int); extern unsigned long strtoul(const char *, char **, int); extern unsigned long long strtoull(const char *, char **, int); -extern double strtod(const char *nptr, char **endptr); extern int posix_memalign(void **memptr, size_t alignment, size_t size); -static __inline__ float strtof(const char *nptr, char **endptr) -{ - return (float)strtod(nptr, endptr); -} - -extern int atoi(const char *) __purefunc; -extern long atol(const char *) __purefunc; -extern long long atoll(const char *) __purefunc; +extern double atof(const char*); +extern double strtod(const char*, char**); +extern float strtof(const char*, char**); +extern long double strtold(const char*, char**); -static __inline__ double atof(const char *nptr) -{ - return (strtod(nptr, NULL)); -} +extern int atoi(const char*) __purefunc; +extern long atol(const char*) __purefunc; +extern long long atoll(const char*) __purefunc; extern int abs(int) __pure2; extern long labs(long) __pure2; @@ -152,6 +147,10 @@ typedef struct { extern lldiv_t lldiv(long long, long long); +/* BSD compatibility. */ +extern const char* getprogname(void); +extern void setprogname(const char*); + #if 1 /* MISSING FROM BIONIC - ENABLED FOR STLPort and libstdc++-v3 */ /* make STLPort happy */ extern int mblen(const char *, size_t); diff --git a/9/platforms/android-19/arch-mips64/usr/include/string.h b/9/platforms/android-19/arch-mips64/usr/include/string.h index 37d22c4..f00e291 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/string.h +++ b/9/platforms/android-19/arch-mips64/usr/include/string.h @@ -42,13 +42,13 @@ extern void* memcpy(void* __restrict, const void* __restrict, size_t); extern void* memmove(void *, const void *, size_t); extern void* memset(void *, int, size_t); extern void* memmem(const void *, size_t, const void *, size_t) __purefunc; -extern void memswap(void *, void *, size_t); extern char* index(const char *, int) __purefunc; extern char* strchr(const char *, int) __purefunc; extern char* __strchr_chk(const char *, int, size_t); extern char* strrchr(const char *, int) __purefunc; +extern char* __strrchr_chk(const char *, int, size_t); extern size_t strlen(const char *) __purefunc; extern size_t __strlen_chk(const char *, size_t); @@ -244,6 +244,7 @@ size_t strlen(const char *s) { return __strlen_chk(s, bos); } +#if !defined(HAS_STRCHR) __BIONIC_FORTIFY_INLINE char* strchr(const char *s, int c) { size_t bos = __bos(s); @@ -262,8 +263,7 @@ char* strchr(const char *s, int c) { return __strchr_chk(s, c, bos); } - -extern char* __strrchr_chk(const char *, int, size_t); +#endif __BIONIC_FORTIFY_INLINE char* strrchr(const char *s, int c) { diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/_sigdefs.h b/9/platforms/android-19/arch-mips64/usr/include/sys/_sigdefs.h index eadf7b9..44d60d9 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/_sigdefs.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/_sigdefs.h @@ -35,67 +35,41 @@ #error __BIONIC_SIGDEF not defined #endif -__BIONIC_SIGDEF(HUP,1,"Hangup") -__BIONIC_SIGDEF(INT,2,"Interrupt") -__BIONIC_SIGDEF(QUIT,3,"Quit") -__BIONIC_SIGDEF(ILL,4,"Illegal instruction") -__BIONIC_SIGDEF(TRAP,5,"Trap") -__BIONIC_SIGDEF(ABRT,6,"Aborted") -#ifdef __mips__ -__BIONIC_SIGDEF(EMT,7,"EMT") -#else -__BIONIC_SIGDEF(BUS,7,"Bus error") +__BIONIC_SIGDEF(SIGHUP, "Hangup") +__BIONIC_SIGDEF(SIGINT, "Interrupt") +__BIONIC_SIGDEF(SIGQUIT, "Quit") +__BIONIC_SIGDEF(SIGILL, "Illegal instruction") +__BIONIC_SIGDEF(SIGTRAP, "Trap") +__BIONIC_SIGDEF(SIGABRT, "Aborted") +#ifdef SIGEMT +__BIONIC_SIGDEF(SIGEMT, "EMT") #endif -__BIONIC_SIGDEF(FPE,8,"Floating point exception") -__BIONIC_SIGDEF(KILL,9,"Killed") -#ifdef __mips__ -__BIONIC_SIGDEF(BUS,10,"Bus error") -#else -__BIONIC_SIGDEF(USR1,10,"User signal 1") -#endif -__BIONIC_SIGDEF(SEGV,11,"Segmentation fault") -#ifdef __mips__ -__BIONIC_SIGDEF(SYS,12,"Bad system call") -#else -__BIONIC_SIGDEF(USR2,12,"User signal 2") -#endif -__BIONIC_SIGDEF(PIPE,13,"Broken pipe") -__BIONIC_SIGDEF(ALRM,14,"Alarm clock") -__BIONIC_SIGDEF(TERM,15,"Terminated") -#ifdef __mips__ -__BIONIC_SIGDEF(USR1,16,"User signal 1") -__BIONIC_SIGDEF(USR2,17,"User signal 2") -__BIONIC_SIGDEF(CHLD,18,"Child exited") -__BIONIC_SIGDEF(PWR,19,"Power failure") -__BIONIC_SIGDEF(WINCH,20,"Window size changed") -__BIONIC_SIGDEF(URG,21,"Urgent I/O condition") -__BIONIC_SIGDEF(IO,22,"I/O possible") -__BIONIC_SIGDEF(STOP,23,"Stopped (signal)") -__BIONIC_SIGDEF(TSTP,24,"Stopped") -__BIONIC_SIGDEF(CONT,25,"Continue") -__BIONIC_SIGDEF(TTIN,26,"Stopped (tty input)") -__BIONIC_SIGDEF(TTOU,27,"Stopped (tty output)") -__BIONIC_SIGDEF(VTALRM,28,"Virtual timer expired") -__BIONIC_SIGDEF(PROF,29,"Profiling timer expired") -__BIONIC_SIGDEF(XCPU,30,"CPU time limit exceeded") -__BIONIC_SIGDEF(XFSZ,31,"File size limit exceeded") -#else -__BIONIC_SIGDEF(STKFLT,16,"Stack fault") -__BIONIC_SIGDEF(CHLD,17,"Child exited") -__BIONIC_SIGDEF(CONT,18,"Continue") -__BIONIC_SIGDEF(STOP,19,"Stopped (signal)") -__BIONIC_SIGDEF(TSTP,20,"Stopped") -__BIONIC_SIGDEF(TTIN,21,"Stopped (tty input)") -__BIONIC_SIGDEF(TTOU,22,"Stopped (tty output)") -__BIONIC_SIGDEF(URG,23,"Urgent I/O condition") -__BIONIC_SIGDEF(XCPU,24,"CPU time limit exceeded") -__BIONIC_SIGDEF(XFSZ,25,"File size limit exceeded") -__BIONIC_SIGDEF(VTALRM,26,"Virtual timer expired") -__BIONIC_SIGDEF(PROF,27,"Profiling timer expired") -__BIONIC_SIGDEF(WINCH,28,"Window size changed") -__BIONIC_SIGDEF(IO,29,"I/O possible") -__BIONIC_SIGDEF(PWR,30,"Power failure") -__BIONIC_SIGDEF(SYS,31,"Bad system call") +__BIONIC_SIGDEF(SIGFPE, "Floating point exception") +__BIONIC_SIGDEF(SIGKILL, "Killed") +__BIONIC_SIGDEF(SIGBUS, "Bus error") +__BIONIC_SIGDEF(SIGSEGV, "Segmentation fault") +__BIONIC_SIGDEF(SIGPIPE, "Broken pipe") +__BIONIC_SIGDEF(SIGALRM, "Alarm clock") +__BIONIC_SIGDEF(SIGTERM, "Terminated") +__BIONIC_SIGDEF(SIGUSR1, "User signal 1") +__BIONIC_SIGDEF(SIGUSR2, "User signal 2") +__BIONIC_SIGDEF(SIGCHLD, "Child exited") +__BIONIC_SIGDEF(SIGPWR, "Power failure") +__BIONIC_SIGDEF(SIGWINCH, "Window size changed") +__BIONIC_SIGDEF(SIGURG, "Urgent I/O condition") +__BIONIC_SIGDEF(SIGIO, "I/O possible") +__BIONIC_SIGDEF(SIGSTOP, "Stopped (signal)") +__BIONIC_SIGDEF(SIGTSTP, "Stopped") +__BIONIC_SIGDEF(SIGCONT, "Continue") +__BIONIC_SIGDEF(SIGTTIN, "Stopped (tty input)") +__BIONIC_SIGDEF(SIGTTOU, "Stopped (tty output)") +__BIONIC_SIGDEF(SIGVTALRM, "Virtual timer expired") +__BIONIC_SIGDEF(SIGPROF, "Profiling timer expired") +__BIONIC_SIGDEF(SIGXCPU, "CPU time limit exceeded") +__BIONIC_SIGDEF(SIGXFSZ, "File size limit exceeded") +#if defined(SIGSTKFLT) +__BIONIC_SIGDEF(SIGSTKFLT, "Stack fault") #endif +__BIONIC_SIGDEF(SIGSYS, "Bad system call") #undef __BIONIC_SIGDEF diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/_system_properties.h b/9/platforms/android-19/arch-mips64/usr/include/sys/_system_properties.h index 5eee7f0..5a681df 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/_system_properties.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/_system_properties.h @@ -139,6 +139,14 @@ int __system_property_foreach_compat( void (*propfn)(const prop_info *pi, void *cookie), void *cookie); +/* Initialize the system properties area in read only mode. + * Should be done by all processes that need to read system + * properties. + * + * Returns 0 on success, -1 otherwise. + */ +int __system_properties_init(); + __END_DECLS #endif diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/_types.h b/9/platforms/android-19/arch-mips64/usr/include/sys/_types.h index 6bf9c1c..7b99e06 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/_types.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/_types.h @@ -32,50 +32,15 @@ */ #ifndef _SYS__TYPES_H_ -#define _SYS__TYPES_H_ +#define _SYS__TYPES_H_ -typedef __signed char __int8_t; -typedef unsigned char __uint8_t; -typedef short __int16_t; -typedef unsigned short __uint16_t; -typedef int __int32_t; -typedef unsigned int __uint32_t; -#if __LP64__ -typedef long __int64_t; -typedef unsigned long __uint64_t; -#else -typedef long long __int64_t; -typedef unsigned long long __uint64_t; -#endif +#undef __KERNEL_STRICT_NAMES +#define __KERNEL_STRICT_NAMES 1 -#if __LP64__ -typedef long __intptr_t; -typedef unsigned long __uintptr_t; -#else -typedef int __intptr_t; -typedef unsigned int __uintptr_t; -#endif - -#if __LP64__ -typedef long __time_t; -#else -typedef int __time_t; /* Historical accident. */ -#endif - -typedef int __timer_t; - -typedef int __clockid_t; - -#ifndef __cplusplus -typedef int __wchar_t; -#endif - -typedef double __double_t; -typedef float __float_t; - -typedef __builtin_va_list __va_list; +#include <machine/_types.h> typedef unsigned long __cpuid_t; /* CPU id */ +typedef __int32_t __dev_t; /* device number */ typedef __uint32_t __fixpt_t; /* fixed point number */ typedef __uint32_t __gid_t; /* group id */ typedef __uint32_t __id_t; /* may contain pid, uid or gid */ @@ -104,4 +69,9 @@ typedef union { __int64_t __mbstateL; /* for alignment */ } __mbstate_t; +/* BIONIC: if we're using non-cleaned up user-level kernel headers, + * this will prevent many type declaration conflicts + */ +#define __KERNEL_STRICT_NAMES 1 + #endif /* !_SYS__TYPES_H_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/exec_elf.h b/9/platforms/android-19/arch-mips64/usr/include/sys/exec_elf.h index d14c596..f72f81e 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/exec_elf.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/exec_elf.h @@ -1,11 +1,6 @@ -/* $NetBSD: exec_elf.h,v 1.131 2013/10/29 00:22:59 christos Exp $ */ - -/*- - * Copyright (c) 1994 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Christos Zoulas. +/* $OpenBSD: exec_elf.h,v 1.41 2006/01/06 18:53:05 millert Exp $ */ +/* + * Copyright (c) 1995, 1996 Erik Theisen. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -15,164 +10,101 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This is the ELF ABI header file + * formerly known as "elf_abi.h". */ #ifndef _SYS_EXEC_ELF_H_ #define _SYS_EXEC_ELF_H_ -/* - * The current ELF ABI specification is available at: - * http://www.sco.com/developers/gabi/ - * - * Current header definitions are in: - * http://www.sco.com/developers/gabi/latest/ch4.eheader.html - */ +#include <machine/_types.h> +#include <machine/exec.h> -#if defined(_KERNEL) || defined(_STANDALONE) -#include <sys/types.h> -#else -#include <inttypes.h> -#endif /* _KERNEL || _STANDALONE */ +typedef __uint8_t Elf_Byte; -#if HAVE_NBTOOL_CONFIG_H -#include <nbinclude/machine/elf_machdep.h> +typedef __uint32_t Elf32_Addr; /* Unsigned program address */ +typedef __uint32_t Elf32_Off; /* Unsigned file offset */ +typedef __int32_t Elf32_Sword; /* Signed large integer */ +typedef __uint32_t Elf32_Word; /* Unsigned large integer */ +typedef __uint16_t Elf32_Half; /* Unsigned medium integer */ + +typedef __uint64_t Elf64_Addr; +typedef __uint64_t Elf64_Off; +typedef __int32_t Elf64_Shalf; + +#ifdef __alpha__ +typedef __int64_t Elf64_Sword; +typedef __uint64_t Elf64_Word; #else -#include <machine/elf_machdep.h> +typedef __int32_t Elf64_Sword; +typedef __uint32_t Elf64_Word; #endif -typedef uint8_t Elf_Byte; - -typedef uint32_t Elf32_Addr; -#define ELF32_FSZ_ADDR 4 -typedef uint32_t Elf32_Off; -typedef int32_t Elf32_SOff; -#define ELF32_FSZ_OFF 4 -typedef int32_t Elf32_Sword; -#define ELF32_FSZ_SWORD 4 -typedef uint32_t Elf32_Word; -#define ELF32_FSZ_WORD 4 -typedef uint16_t Elf32_Half; -#define ELF32_FSZ_HALF 2 -typedef uint64_t Elf32_Lword; -#define ELF32_FSZ_LWORD 8 - -typedef uint64_t Elf64_Addr; -#define ELF64_FSZ_ADDR 8 -typedef uint64_t Elf64_Off; -typedef int64_t Elf64_SOff; -#define ELF64_FSZ_OFF 8 -typedef int32_t Elf64_Shalf; -#define ELF64_FSZ_SHALF 4 - -typedef int32_t Elf64_Sword; -#define ELF64_FSZ_SWORD 4 -typedef uint32_t Elf64_Word; -#define ELF64_FSZ_WORD 4 - -typedef int64_t Elf64_Sxword; -#define ELF64_FSZ_SXWORD 8 -typedef uint64_t Elf64_Xword; -#define ELF64_FSZ_XWORD 8 -typedef uint64_t Elf64_Lword; -#define ELF64_FSZ_LWORD 8 -typedef uint16_t Elf64_Half; -#define ELF64_FSZ_HALF 2 +typedef __int64_t Elf64_Sxword; +typedef __uint64_t Elf64_Xword; + +typedef __uint32_t Elf64_Half; +typedef __uint16_t Elf64_Quarter; /* - * ELF Header + * e_ident[] identification indexes + * See http://www.caldera.com/developers/gabi/2000-07-17/ch4.eheader.html */ -#define ELF_NIDENT 16 - -typedef struct { - unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ - Elf32_Half e_type; /* file type */ - Elf32_Half e_machine; /* machine type */ - Elf32_Word e_version; /* version number */ - Elf32_Addr e_entry; /* entry point */ - Elf32_Off e_phoff; /* Program hdr offset */ - Elf32_Off e_shoff; /* Section hdr offset */ - Elf32_Word e_flags; /* Processor flags */ - Elf32_Half e_ehsize; /* sizeof ehdr */ - Elf32_Half e_phentsize; /* Program header entry size */ - Elf32_Half e_phnum; /* Number of program headers */ - Elf32_Half e_shentsize; /* Section header entry size */ - Elf32_Half e_shnum; /* Number of section headers */ - Elf32_Half e_shstrndx; /* String table index */ -} Elf32_Ehdr; - -typedef struct { - unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ - Elf64_Half e_type; /* file type */ - Elf64_Half e_machine; /* machine type */ - Elf64_Word e_version; /* version number */ - Elf64_Addr e_entry; /* entry point */ - Elf64_Off e_phoff; /* Program hdr offset */ - Elf64_Off e_shoff; /* Section hdr offset */ - Elf64_Word e_flags; /* Processor flags */ - Elf64_Half e_ehsize; /* sizeof ehdr */ - Elf64_Half e_phentsize; /* Program header entry size */ - Elf64_Half e_phnum; /* Number of program headers */ - Elf64_Half e_shentsize; /* Section header entry size */ - Elf64_Half e_shnum; /* Number of section headers */ - Elf64_Half e_shstrndx; /* String table index */ -} Elf64_Ehdr; - -/* e_ident offsets */ -#define EI_MAG0 0 /* '\177' */ -#define EI_MAG1 1 /* 'E' */ -#define EI_MAG2 2 /* 'L' */ -#define EI_MAG3 3 /* 'F' */ -#define EI_CLASS 4 /* File class */ -#define EI_DATA 5 /* Data encoding */ -#define EI_VERSION 6 /* File version */ -#define EI_OSABI 7 /* Operating system/ABI identification */ -#define EI_ABIVERSION 8 /* ABI version */ -#define EI_PAD 9 /* Start of padding bytes up to EI_NIDENT*/ -#define EI_NIDENT 16 /* First non-ident header byte */ - -/* e_ident[EI_MAG0,EI_MAG3] */ -#define ELFMAG0 0x7f -#define ELFMAG1 'E' -#define ELFMAG2 'L' -#define ELFMAG3 'F' -#define ELFMAG "\177ELF" -#define SELFMAG 4 - -/* e_ident[EI_CLASS] */ -#define ELFCLASSNONE 0 /* Invalid class */ -#define ELFCLASS32 1 /* 32-bit objects */ -#define ELFCLASS64 2 /* 64-bit objects */ -#define ELFCLASSNUM 3 - -/* e_ident[EI_DATA] */ -#define ELFDATANONE 0 /* Invalid data encoding */ -#define ELFDATA2LSB 1 /* 2's complement values, LSB first */ -#define ELFDATA2MSB 2 /* 2's complement values, MSB first */ - -/* e_ident[EI_VERSION] */ -#define EV_NONE 0 /* Invalid version */ -#define EV_CURRENT 1 /* Current version */ -#define EV_NUM 2 - -/* e_ident[EI_OSABI] */ +#define EI_MAG0 0 /* file ID */ +#define EI_MAG1 1 /* file ID */ +#define EI_MAG2 2 /* file ID */ +#define EI_MAG3 3 /* file ID */ +#define EI_CLASS 4 /* file class */ +#define EI_DATA 5 /* data encoding */ +#define EI_VERSION 6 /* ELF header version */ +#define EI_OSABI 7 /* OS/ABI ID */ +#define EI_ABIVERSION 8 /* ABI version */ +#define EI_PAD 9 /* start of pad bytes */ +#define EI_NIDENT 16 /* Size of e_ident[] */ + +/* e_ident[] magic number */ +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ +#define ELFMAG "\177ELF" /* magic */ +#define SELFMAG 4 /* size of magic */ + +/* e_ident[] file class */ +#define ELFCLASSNONE 0 /* invalid */ +#define ELFCLASS32 1 /* 32-bit objs */ +#define ELFCLASS64 2 /* 64-bit objs */ +#define ELFCLASSNUM 3 /* number of classes */ + +/* e_ident[] data encoding */ +#define ELFDATANONE 0 /* invalid */ +#define ELFDATA2LSB 1 /* Little-Endian */ +#define ELFDATA2MSB 2 /* Big-Endian */ +#define ELFDATANUM 3 /* number of data encode defines */ + +/* e_ident[] Operating System/ABI */ #define ELFOSABI_SYSV 0 /* UNIX System V ABI */ #define ELFOSABI_HPUX 1 /* HP-UX operating system */ #define ELFOSABI_NETBSD 2 /* NetBSD */ #define ELFOSABI_LINUX 3 /* GNU/Linux */ #define ELFOSABI_HURD 4 /* GNU/Hurd */ -#define ELFOSABI_86OPEN 5 /* 86Open */ +#define ELFOSABI_86OPEN 5 /* 86Open common IA32 ABI */ #define ELFOSABI_SOLARIS 6 /* Solaris */ #define ELFOSABI_MONTEREY 7 /* Monterey */ #define ELFOSABI_IRIX 8 /* IRIX */ @@ -180,832 +112,421 @@ typedef struct { #define ELFOSABI_TRU64 10 /* TRU64 UNIX */ #define ELFOSABI_MODESTO 11 /* Novell Modesto */ #define ELFOSABI_OPENBSD 12 /* OpenBSD */ -#define ELFOSABI_OPENVMS 13 /* OpenVMS */ -#define ELFOSABI_NSK 14 /* HP Non-Stop Kernel */ -#define ELFOSABI_AROS 15 /* Amiga Research OS */ -/* Unofficial OSABIs follow */ #define ELFOSABI_ARM 97 /* ARM */ #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ -#define ELFOSABI_NONE ELFOSABI_SYSV -#define ELFOSABI_AIX ELFOSABI_MONTEREY - -/* e_type */ -#define ET_NONE 0 /* No file type */ -#define ET_REL 1 /* Relocatable file */ -#define ET_EXEC 2 /* Executable file */ -#define ET_DYN 3 /* Shared object file */ -#define ET_CORE 4 /* Core file */ -#define ET_NUM 5 - -#define ET_LOOS 0xfe00 /* Operating system specific range */ -#define ET_HIOS 0xfeff -#define ET_LOPROC 0xff00 /* Processor-specific range */ -#define ET_HIPROC 0xffff - -/* e_machine */ -#define EM_NONE 0 /* No machine */ -#define EM_M32 1 /* AT&T WE 32100 */ -#define EM_SPARC 2 /* SPARC */ -#define EM_386 3 /* Intel 80386 */ -#define EM_68K 4 /* Motorola 68000 */ -#define EM_88K 5 /* Motorola 88000 */ -#define EM_486 6 /* Intel 80486 */ -#define EM_860 7 /* Intel 80860 */ -#define EM_MIPS 8 /* MIPS I Architecture */ -#define EM_S370 9 /* Amdahl UTS on System/370 */ -#define EM_MIPS_RS3_LE 10 /* MIPS RS3000 Little-endian */ - /* 11-14 - Reserved */ -#define EM_RS6000 11 /* IBM RS/6000 XXX reserved */ -#define EM_PARISC 15 /* Hewlett-Packard PA-RISC */ -#define EM_NCUBE 16 /* NCube XXX reserved */ -#define EM_VPP500 17 /* Fujitsu VPP500 */ -#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ -#define EM_960 19 /* Intel 80960 */ -#define EM_PPC 20 /* PowerPC */ -#define EM_PPC64 21 /* 64-bit PowerPC */ - /* 22-35 - Reserved */ -#define EM_S390 22 /* System/390 XXX reserved */ -#define EM_V800 36 /* NEC V800 */ -#define EM_FR20 37 /* Fujitsu FR20 */ -#define EM_RH32 38 /* TRW RH-32 */ -#define EM_RCE 39 /* Motorola RCE */ -#define EM_ARM 40 /* Advanced RISC Machines ARM */ -#define EM_ALPHA 41 /* DIGITAL Alpha */ -#define EM_SH 42 /* Hitachi Super-H */ -#define EM_SPARCV9 43 /* SPARC Version 9 */ -#define EM_TRICORE 44 /* Siemens Tricore */ -#define EM_ARC 45 /* Argonaut RISC Core */ -#define EM_H8_300 46 /* Hitachi H8/300 */ -#define EM_H8_300H 47 /* Hitachi H8/300H */ -#define EM_H8S 48 /* Hitachi H8S */ -#define EM_H8_500 49 /* Hitachi H8/500 */ -#define EM_IA_64 50 /* Intel Merced Processor */ -#define EM_MIPS_X 51 /* Stanford MIPS-X */ -#define EM_COLDFIRE 52 /* Motorola Coldfire */ -#define EM_68HC12 53 /* Motorola MC68HC12 */ -#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */ -#define EM_PCP 55 /* Siemens PCP */ -#define EM_NCPU 56 /* Sony nCPU embedded RISC processor */ -#define EM_NDR1 57 /* Denso NDR1 microprocessor */ -#define EM_STARCORE 58 /* Motorola Star*Core processor */ -#define EM_ME16 59 /* Toyota ME16 processor */ -#define EM_ST100 60 /* STMicroelectronics ST100 processor */ -#define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded family processor */ -#define EM_X86_64 62 /* AMD x86-64 architecture */ -#define EM_PDSP 63 /* Sony DSP Processor */ -#define EM_PDP10 64 /* Digital Equipment Corp. PDP-10 */ -#define EM_PDP11 65 /* Digital Equipment Corp. PDP-11 */ -#define EM_FX66 66 /* Siemens FX66 microcontroller */ -#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 bit microcontroller */ -#define EM_ST7 68 /* STMicroelectronics ST7 8-bit microcontroller */ -#define EM_68HC16 69 /* Motorola MC68HC16 Microcontroller */ -#define EM_68HC11 70 /* Motorola MC68HC11 Microcontroller */ -#define EM_68HC08 71 /* Motorola MC68HC08 Microcontroller */ -#define EM_68HC05 72 /* Motorola MC68HC05 Microcontroller */ -#define EM_SVX 73 /* Silicon Graphics SVx */ -#define EM_ST19 74 /* STMicroelectronics ST19 8-bit CPU */ -#define EM_VAX 75 /* Digital VAX */ -#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ -#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded CPU */ -#define EM_FIREPATH 78 /* Element 14 64-bit DSP processor */ -#define EM_ZSP 79 /* LSI Logic's 16-bit DSP processor */ -#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ -#define EM_HUANY 81 /* Harvard's machine-independent format */ -#define EM_PRISM 82 /* SiTera Prism */ -#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ -#define EM_FR30 84 /* Fujitsu FR30 */ -#define EM_D10V 85 /* Mitsubishi D10V */ -#define EM_D30V 86 /* Mitsubishi D30V */ -#define EM_V850 87 /* NEC v850 */ -#define EM_M32R 88 /* Mitsubishi M32R */ -#define EM_MN10300 89 /* Matsushita MN10300 */ -#define EM_MN10200 90 /* Matsushita MN10200 */ -#define EM_PJ 91 /* picoJava */ -#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ -#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ -#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ -#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */ -#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Processor */ -#define EM_NS32K 97 /* National Semiconductor 32000 series */ -#define EM_TPC 98 /* Tenor Network TPC processor */ -#define EM_SNP1K 99 /* Trebia SNP 1000 processor */ -#define EM_ST200 100 /* STMicroelectronics ST200 microcontroller */ -#define EM_IP2K 101 /* Ubicom IP2xxx microcontroller family */ -#define EM_MAX 102 /* MAX processor */ -#define EM_CR 103 /* National Semiconductor CompactRISC micorprocessor */ -#define EM_F2MC16 104 /* Fujitsu F2MC16 */ -#define EM_MSP430 105 /* Texas Instruments MSP430 */ -#define EM_BLACKFIN 106 /* Analog Devices Blackfin DSP */ -#define EM_SE_C33 107 /* Seiko Epson S1C33 family */ -#define EM_SEP 108 /* Sharp embedded microprocessor */ -#define EM_ARCA 109 /* Arca RISC microprocessor */ -#define EM_UNICORE 110 /* UNICORE from PKU-Unity Ltd. and MPRC Peking University */ -#define EM_AARCH64 183 /* AArch64 64-bit ARM microprocessor */ - -/* Unofficial machine types follow */ -#define EM_AVR32 6317 /* used by NetBSD/avr32 */ -#define EM_ALPHA_EXP 36902 /* used by NetBSD/alpha; obsolete */ -#define EM_NUM 36903 - -/* - * Program Header - */ -typedef struct { - Elf32_Word p_type; /* entry type */ - Elf32_Off p_offset; /* offset */ - Elf32_Addr p_vaddr; /* virtual address */ - Elf32_Addr p_paddr; /* physical address */ - Elf32_Word p_filesz; /* file size */ - Elf32_Word p_memsz; /* memory size */ - Elf32_Word p_flags; /* flags */ - Elf32_Word p_align; /* memory & file alignment */ -} Elf32_Phdr; +/* e_ident */ +#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ + (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ + (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ + (ehdr).e_ident[EI_MAG3] == ELFMAG3) + +/* ELF Header */ +typedef struct elfhdr { + unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ + Elf32_Half e_type; /* object file type */ + Elf32_Half e_machine; /* machine */ + Elf32_Word e_version; /* object file version */ + Elf32_Addr e_entry; /* virtual entry point */ + Elf32_Off e_phoff; /* program header table offset */ + Elf32_Off e_shoff; /* section header table offset */ + Elf32_Word e_flags; /* processor-specific flags */ + Elf32_Half e_ehsize; /* ELF header size */ + Elf32_Half e_phentsize; /* program header entry size */ + Elf32_Half e_phnum; /* number of program header entries */ + Elf32_Half e_shentsize; /* section header entry size */ + Elf32_Half e_shnum; /* number of section header entries */ + Elf32_Half e_shstrndx; /* section header table's "section + header string table" entry offset */ +} Elf32_Ehdr; typedef struct { - Elf64_Word p_type; /* entry type */ - Elf64_Word p_flags; /* flags */ - Elf64_Off p_offset; /* offset */ - Elf64_Addr p_vaddr; /* virtual address */ - Elf64_Addr p_paddr; /* physical address */ - Elf64_Xword p_filesz; /* file size */ - Elf64_Xword p_memsz; /* memory size */ - Elf64_Xword p_align; /* memory & file alignment */ -} Elf64_Phdr; - -/* p_type */ -#define PT_NULL 0 /* Program header table entry unused */ -#define PT_LOAD 1 /* Loadable program segment */ -#define PT_DYNAMIC 2 /* Dynamic linking information */ -#define PT_INTERP 3 /* Program interpreter */ -#define PT_NOTE 4 /* Auxiliary information */ -#define PT_SHLIB 5 /* Reserved, unspecified semantics */ -#define PT_PHDR 6 /* Entry for header table itself */ -#define PT_TLS 7 /* TLS initialisation image */ -#define PT_NUM 8 - -#define PT_LOOS 0x60000000 /* OS-specific range */ - -/* GNU-specific */ -#define PT_GNU_EH_FRAME 0x6474e550 /* EH frame segment */ -#define PT_GNU_STACK 0x6474e551 /* Indicate executable stack */ -#define PT_GNU_RELRO 0x6474e552 /* Make read-only after relocation */ - -#define PT_HIOS 0x6fffffff -#define PT_LOPROC 0x70000000 /* Processor-specific range */ -#define PT_HIPROC 0x7fffffff - -#define PT_MIPS_REGINFO 0x70000000 - -/* p_flags */ -#define PF_R 0x4 /* Segment is readable */ -#define PF_W 0x2 /* Segment is writable */ -#define PF_X 0x1 /* Segment is executable */ - -#define PF_MASKOS 0x0ff00000 /* Operating system specific values */ -#define PF_MASKPROC 0xf0000000 /* Processor-specific values */ + unsigned char e_ident[EI_NIDENT]; /* Id bytes */ + Elf64_Quarter e_type; /* file type */ + Elf64_Quarter e_machine; /* machine type */ + Elf64_Half e_version; /* version number */ + Elf64_Addr e_entry; /* entry point */ + Elf64_Off e_phoff; /* Program hdr offset */ + Elf64_Off e_shoff; /* Section hdr offset */ + Elf64_Half e_flags; /* Processor flags */ + Elf64_Quarter e_ehsize; /* sizeof ehdr */ + Elf64_Quarter e_phentsize; /* Program header entry size */ + Elf64_Quarter e_phnum; /* Number of program headers */ + Elf64_Quarter e_shentsize; /* Section header entry size */ + Elf64_Quarter e_shnum; /* Number of section headers */ + Elf64_Quarter e_shstrndx; /* String table index */ +} Elf64_Ehdr; -/* Extended program header index. */ -#define PN_XNUM 0xffff +/* e_type */ +#define ET_NONE 0 /* No file type */ +#define ET_REL 1 /* relocatable file */ +#define ET_EXEC 2 /* executable file */ +#define ET_DYN 3 /* shared object file */ +#define ET_CORE 4 /* core file */ +#define ET_NUM 5 /* number of types */ +#define ET_LOPROC 0xff00 /* reserved range for processor */ +#define ET_HIPROC 0xffff /* specific e_type */ -/* - * Section Headers +/* e_machine */ +#define EM_NONE 0 /* No Machine */ +#define EM_M32 1 /* AT&T WE 32100 */ +#define EM_SPARC 2 /* SPARC */ +#define EM_386 3 /* Intel 80386 */ +#define EM_68K 4 /* Motorola 68000 */ +#define EM_88K 5 /* Motorola 88000 */ +#define EM_486 6 /* Intel 80486 - unused? */ +#define EM_860 7 /* Intel 80860 */ +#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ +/* + * Don't know if EM_MIPS_RS4_BE, + * EM_SPARC64, EM_PARISC, + * or EM_PPC are ABI compliant */ +#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ +#define EM_SPARC64 11 /* SPARC v9 64-bit unoffical */ +#define EM_PARISC 15 /* HPPA */ +#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ +#define EM_PPC 20 /* PowerPC */ +#define EM_ARM 40 /* Advanced RISC Machines ARM */ +#define EM_ALPHA 41 /* DEC ALPHA */ +#define EM_SPARCV9 43 /* SPARC version 9 */ +#define EM_ALPHA_EXP 0x9026 /* DEC ALPHA */ +#define EM_AMD64 62 /* AMD64 architecture */ +#define EM_VAX 75 /* DEC VAX */ +#define EM_NUM 15 /* number of machine types */ + +/* Version */ +#define EV_NONE 0 /* Invalid */ +#define EV_CURRENT 1 /* Current */ +#define EV_NUM 2 /* number of versions */ + +/* Section Header */ typedef struct { - Elf32_Word sh_name; /* section name (.shstrtab index) */ - Elf32_Word sh_type; /* section type */ - Elf32_Word sh_flags; /* section flags */ - Elf32_Addr sh_addr; /* virtual address */ + Elf32_Word sh_name; /* name - index into section header + string table section */ + Elf32_Word sh_type; /* type */ + Elf32_Word sh_flags; /* flags */ + Elf32_Addr sh_addr; /* address */ Elf32_Off sh_offset; /* file offset */ Elf32_Word sh_size; /* section size */ - Elf32_Word sh_link; /* link to another */ - Elf32_Word sh_info; /* misc info */ - Elf32_Word sh_addralign; /* memory alignment */ - Elf32_Word sh_entsize; /* table entry size */ + Elf32_Word sh_link; /* section header table index link */ + Elf32_Word sh_info; /* extra information */ + Elf32_Word sh_addralign; /* address alignment */ + Elf32_Word sh_entsize; /* section entry size */ } Elf32_Shdr; typedef struct { - Elf64_Word sh_name; /* section name (.shstrtab index) */ - Elf64_Word sh_type; /* section type */ + Elf64_Half sh_name; /* section name */ + Elf64_Half sh_type; /* section type */ Elf64_Xword sh_flags; /* section flags */ Elf64_Addr sh_addr; /* virtual address */ Elf64_Off sh_offset; /* file offset */ Elf64_Xword sh_size; /* section size */ - Elf64_Word sh_link; /* link to another */ - Elf64_Word sh_info; /* misc info */ + Elf64_Half sh_link; /* link to another */ + Elf64_Half sh_info; /* misc info */ Elf64_Xword sh_addralign; /* memory alignment */ Elf64_Xword sh_entsize; /* table entry size */ } Elf64_Shdr; +/* Special Section Indexes */ +#define SHN_UNDEF 0 /* undefined */ +#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ +#define SHN_LOPROC 0xff00 /* reserved range for processor */ +#define SHN_HIPROC 0xff1f /* specific section indexes */ +#define SHN_ABS 0xfff1 /* absolute value */ +#define SHN_COMMON 0xfff2 /* common symbol */ +#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ + /* sh_type */ -#define SHT_NULL 0 /* Section header table entry unused */ -#define SHT_PROGBITS 1 /* Program information */ -#define SHT_SYMTAB 2 /* Symbol table */ -#define SHT_STRTAB 3 /* String table */ -#define SHT_RELA 4 /* Relocation information w/ addend */ -#define SHT_HASH 5 /* Symbol hash table */ -#define SHT_DYNAMIC 6 /* Dynamic linking information */ -#define SHT_NOTE 7 /* Auxiliary information */ -#define SHT_NOBITS 8 /* No space allocated in file image */ -#define SHT_REL 9 /* Relocation information w/o addend */ -#define SHT_SHLIB 10 /* Reserved, unspecified semantics */ -#define SHT_DYNSYM 11 /* Symbol table for dynamic linker */ -#define SHT_INIT_ARRAY 14 /* Initialization function pointers */ -#define SHT_FINI_ARRAY 15 /* Termination function pointers */ -#define SHT_PREINIT_ARRAY 16 /* Pre-initialization function ptrs */ -#define SHT_GROUP 17 /* Section group */ -#define SHT_SYMTAB_SHNDX 18 /* Section indexes (see SHN_XINDEX) */ -#define SHT_NUM 19 - -#define SHT_LOOS 0x60000000 /* Operating system specific range */ -#define SHT_GNU_HASH 0x6ffffff6 /* GNU style symbol hash table */ -#define SHT_SUNW_move 0x6ffffffa -#define SHT_SUNW_syminfo 0x6ffffffc -#define SHT_SUNW_verdef 0x6ffffffd /* Versions defined by file */ -#define SHT_GNU_verdef SHT_SUNW_verdef -#define SHT_SUNW_verneed 0x6ffffffe /* Versions needed by file */ -#define SHT_GNU_verneed SHT_SUNW_verneed -#define SHT_SUNW_versym 0x6fffffff /* Symbol versions */ -#define SHT_GNU_versym SHT_SUNW_versym -#define SHT_HIOS 0x6fffffff -#define SHT_LOPROC 0x70000000 /* Processor-specific range */ -#define SHT_AMD64_UNWIND 0x70000001 /* unwind information */ -#define SHT_ARM_EXIDX 0x70000001 /* exception index table */ -#define SHT_ARM_PREEMPTMAP 0x70000002 /* BPABI DLL dynamic linking - * pre-emption map */ -#define SHT_ARM_ATTRIBUTES 0x70000003 /* Object file compatibility - * attributes */ -#define SHT_ARM_DEBUGOVERLAY 0x70000004 /* See DBGOVL for details */ -#define SHT_ARM_OVERLAYSECTION 0x70000005 -#define SHT_HIPROC 0x7fffffff -#define SHT_LOUSER 0x80000000 /* Application-specific range */ -#define SHT_HIUSER 0xffffffff - -/* sh_flags */ -#define SHF_WRITE 0x00000001 /* Contains writable data */ -#define SHF_ALLOC 0x00000002 /* Occupies memory */ -#define SHF_EXECINSTR 0x00000004 /* Contains executable insns */ -#define SHF_MERGE 0x00000010 /* Might be merged */ -#define SHF_STRINGS 0x00000020 /* Contains nul terminated strings */ -#define SHF_INFO_LINK 0x00000040 /* "sh_info" contains SHT index */ -#define SHF_LINK_ORDER 0x00000080 /* Preserve order after combining */ -#define SHF_OS_NONCONFORMING 0x00000100 /* OS specific handling required */ -#define SHF_GROUP 0x00000200 /* Is member of a group */ -#define SHF_TLS 0x00000400 /* Holds thread-local data */ -#define SHF_MASKOS 0x0ff00000 /* Operating system specific values */ -#define SHF_MASKPROC 0xf0000000 /* Processor-specific values */ -#define SHF_ORDERED 0x40000000 /* Ordering requirement (Solaris) */ -#define SHF_EXCLUDE 0x80000000 /* Excluded unless unles ref/alloc - (Solaris).*/ -/* - * Symbol Table - */ -typedef struct { - Elf32_Word st_name; /* Symbol name (.strtab index) */ - Elf32_Word st_value; /* value of symbol */ - Elf32_Word st_size; /* size of symbol */ - Elf_Byte st_info; /* type / binding attrs */ - Elf_Byte st_other; /* unused */ - Elf32_Half st_shndx; /* section index of symbol */ +#define SHT_NULL 0 /* inactive */ +#define SHT_PROGBITS 1 /* program defined information */ +#define SHT_SYMTAB 2 /* symbol table section */ +#define SHT_STRTAB 3 /* string table section */ +#define SHT_RELA 4 /* relocation section with addends*/ +#define SHT_HASH 5 /* symbol hash table section */ +#define SHT_DYNAMIC 6 /* dynamic section */ +#define SHT_NOTE 7 /* note section */ +#define SHT_NOBITS 8 /* no space section */ +#define SHT_REL 9 /* relation section without addends */ +#define SHT_SHLIB 10 /* reserved - purpose unknown */ +#define SHT_DYNSYM 11 /* dynamic symbol table section */ +#define SHT_NUM 12 /* number of section types */ +#define SHT_LOPROC 0x70000000 /* reserved range for processor */ +#define SHT_HIPROC 0x7fffffff /* specific section header types */ +#define SHT_LOUSER 0x80000000 /* reserved range for application */ +#define SHT_HIUSER 0xffffffff /* specific indexes */ + +/* Section names */ +#define ELF_BSS ".bss" /* uninitialized data */ +#define ELF_DATA ".data" /* initialized data */ +#define ELF_DEBUG ".debug" /* debug */ +#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ +#define ELF_DYNSTR ".dynstr" /* dynamic string table */ +#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ +#define ELF_FINI ".fini" /* termination code */ +#define ELF_GOT ".got" /* global offset table */ +#define ELF_HASH ".hash" /* symbol hash table */ +#define ELF_INIT ".init" /* initialization code */ +#define ELF_REL_DATA ".rel.data" /* relocation data */ +#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ +#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ +#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ +#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ +#define ELF_REL_TEXT ".rel.text" /* relocation code */ +#define ELF_RODATA ".rodata" /* read-only data */ +#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ +#define ELF_STRTAB ".strtab" /* string table */ +#define ELF_SYMTAB ".symtab" /* symbol table */ +#define ELF_TEXT ".text" /* code */ + + +/* Section Attribute Flags - sh_flags */ +#define SHF_WRITE 0x1 /* Writable */ +#define SHF_ALLOC 0x2 /* occupies memory */ +#define SHF_EXECINSTR 0x4 /* executable */ +#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific section attributes */ + +/* Symbol Table Entry */ +typedef struct elf32_sym { + Elf32_Word st_name; /* name - index into string table */ + Elf32_Addr st_value; /* symbol value */ + Elf32_Word st_size; /* symbol size */ + unsigned char st_info; /* type and binding */ + unsigned char st_other; /* 0 - no defined meaning */ + Elf32_Half st_shndx; /* section header index */ } Elf32_Sym; typedef struct { - Elf64_Word st_name; /* Symbol name (.strtab index) */ + Elf64_Half st_name; /* Symbol name index in str table */ Elf_Byte st_info; /* type / binding attrs */ Elf_Byte st_other; /* unused */ - Elf64_Half st_shndx; /* section index of symbol */ - Elf64_Addr st_value; /* value of symbol */ + Elf64_Quarter st_shndx; /* section index of symbol */ + Elf64_Xword st_value; /* value of symbol */ Elf64_Xword st_size; /* size of symbol */ } Elf64_Sym; -/* Symbol Table index of the undefined symbol */ -#define ELF_SYM_UNDEFINED 0 - -#define STN_UNDEF 0 /* undefined index */ - -/* st_info: Symbol Bindings */ -#define STB_LOCAL 0 /* local symbol */ -#define STB_GLOBAL 1 /* global symbol */ -#define STB_WEAK 2 /* weakly defined global symbol */ -#define STB_NUM 3 - -#define STB_LOOS 10 /* Operating system specific range */ -#define STB_HIOS 12 -#define STB_LOPROC 13 /* Processor-specific range */ -#define STB_HIPROC 15 - -/* st_info: Symbol Types */ -#define STT_NOTYPE 0 /* Type not specified */ -#define STT_OBJECT 1 /* Associated with a data object */ -#define STT_FUNC 2 /* Associated with a function */ -#define STT_SECTION 3 /* Associated with a section */ -#define STT_FILE 4 /* Associated with a file name */ -#define STT_COMMON 5 /* Uninitialised common block */ -#define STT_TLS 6 /* Thread local data object */ -#define STT_NUM 7 - -#define STT_LOOS 10 /* Operating system specific range */ -#define STT_HIOS 12 -#define STT_LOPROC 13 /* Processor-specific range */ -#define STT_HIPROC 15 - -/* st_other: Visibility Types */ -#define STV_DEFAULT 0 /* use binding type */ -#define STV_INTERNAL 1 /* not referenced from outside */ -#define STV_HIDDEN 2 /* not visible, may be used via ptr */ -#define STV_PROTECTED 3 /* visible, not preemptible */ -#define STV_EXPORTED 4 -#define STV_SINGLETON 5 -#define STV_ELIMINATE 6 - -/* st_info/st_other utility macros */ -#define ELF_ST_BIND(info) ((uint32_t)(info) >> 4) -#define ELF_ST_TYPE(info) ((uint32_t)(info) & 0xf) -#define ELF_ST_INFO(bind,type) ((Elf_Byte)(((bind) << 4) | \ - ((type) & 0xf))) -#define ELF_ST_VISIBILITY(other) ((uint32_t)(other) & 3) - -/* - * Special section indexes - */ -#define SHN_UNDEF 0 /* Undefined section */ - -#define SHN_LORESERVE 0xff00 /* Reserved range */ -#define SHN_ABS 0xfff1 /* Absolute symbols */ -#define SHN_COMMON 0xfff2 /* Common symbols */ -#define SHN_XINDEX 0xffff /* Escape -- index stored elsewhere */ -#define SHN_HIRESERVE 0xffff - -#define SHN_LOPROC 0xff00 /* Processor-specific range */ -#define SHN_HIPROC 0xff1f -#define SHN_LOOS 0xff20 /* Operating system specific range */ -#define SHN_HIOS 0xff3f - -#define SHN_MIPS_ACOMMON 0xff00 -#define SHN_MIPS_TEXT 0xff01 -#define SHN_MIPS_DATA 0xff02 -#define SHN_MIPS_SCOMMON 0xff03 - -/* - * Relocation Entries - */ +/* Symbol table index */ +#define STN_UNDEF 0 /* undefined */ + +/* Extract symbol info - st_info */ +#define ELF32_ST_BIND(x) ((x) >> 4) +#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) + +#define ELF64_ST_BIND(x) ((x) >> 4) +#define ELF64_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF64_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) + +/* Symbol Binding - ELF32_ST_BIND - st_info */ +#define STB_LOCAL 0 /* Local symbol */ +#define STB_GLOBAL 1 /* Global symbol */ +#define STB_WEAK 2 /* like global - lower precedence */ +#define STB_NUM 3 /* number of symbol bindings */ +#define STB_LOPROC 13 /* reserved range for processor */ +#define STB_HIPROC 15 /* specific symbol bindings */ + +/* Symbol type - ELF32_ST_TYPE - st_info */ +#define STT_NOTYPE 0 /* not specified */ +#define STT_OBJECT 1 /* data object */ +#define STT_FUNC 2 /* function */ +#define STT_SECTION 3 /* section */ +#define STT_FILE 4 /* file */ +#define STT_NUM 5 /* number of symbol types */ +#define STT_LOPROC 13 /* reserved range for processor */ +#define STT_HIPROC 15 /* specific symbol types */ + +/* Relocation entry with implicit addend */ typedef struct { - Elf32_Word r_offset; /* where to do it */ - Elf32_Word r_info; /* index & type of relocation */ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ } Elf32_Rel; +/* Relocation entry with explicit addend */ typedef struct { - Elf32_Word r_offset; /* where to do it */ - Elf32_Word r_info; /* index & type of relocation */ - Elf32_Sword r_addend; /* adjustment value */ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ + Elf32_Sword r_addend; } Elf32_Rela; -/* r_info utility macros */ -#define ELF32_R_SYM(info) ((info) >> 8) -#define ELF32_R_TYPE(info) ((info) & 0xff) -#define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type)) +/* Extract relocation info - r_info */ +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char) (i)) +#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) typedef struct { - Elf64_Addr r_offset; /* where to do it */ + Elf64_Xword r_offset; /* where to do it */ Elf64_Xword r_info; /* index & type of relocation */ } Elf64_Rel; typedef struct { - Elf64_Addr r_offset; /* where to do it */ + Elf64_Xword r_offset; /* where to do it */ Elf64_Xword r_info; /* index & type of relocation */ Elf64_Sxword r_addend; /* adjustment value */ } Elf64_Rela; -/* r_info utility macros */ -#if defined(__mips__) -#if defined(__MIPSEL__) -#define ELF64_R_SYM(info) (((info) >> 0) & 0xffffffff) -#define ELF64_R_SSYM(info) (((info) >> 32) & 0xff) -#define ELF64_R_TYPE3(info) (((info) >> 40) & 0xff) -#define ELF64_R_TYPE2(info) (((info) >> 48) & 0xff) -#define ELF64_R_TYPE(info) (((info) >> 56) & 0xff) -#define ELF64_R_INFO(sym,ssym,type,type2,type3) \ - (((type) << 56) + ((type2) << 48) + ((type3) << 40) + ((ssym) << 32) + (sym)) -#else -#define ELF64_R_SYM(info) (((info) >> 32) & 0xffffffff) -#define ELF64_R_SSYM(info) (((info) >> 24) & 0xff) -#define ELF64_R_TYPE3(info) (((info) >> 16) & 0xff) -#define ELF64_R_TYPE2(info) (((info) >> 8) & 0xff) -#define ELF64_R_TYPE(info) (((info) >> 0) & 0xff) -#define ELF64_R_INFO(sym,ssym,type,type2,type3) \ - (((sym) << 32) + ((ssym) << 24) + ((type3) << 16) + ((type2) << 8) + (type)) -#endif -#else -#define ELF64_R_SYM(info) ((info) >> 32) -#define ELF64_R_TYPE(info) ((info) & 0xffffffff) -#define ELF64_R_INFO(sym,type) (((sym) << 32) + (type)) -#endif - -/* - * Move entries - */ -typedef struct { - Elf32_Lword m_value; /* symbol value */ - Elf32_Word m_info; /* size + index */ - Elf32_Word m_poffset; /* symbol offset */ - Elf32_Half m_repeat; /* repeat count */ - Elf32_Half m_stride; /* stride info */ -} Elf32_Move; - -#define ELF32_M_SYM(info) ((info) >> 8) -#define ELF32_M_SIZE(info) ((info) & 0xff) -#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) +#define ELF64_R_SYM(info) ((info) >> 32) +#define ELF64_R_TYPE(info) ((info) & 0xFFFFFFFF) +#define ELF64_R_INFO(s,t) (((s) << 32) + (__uint32_t)(t)) +/* Program Header */ typedef struct { - Elf64_Lword m_value; /* symbol value */ - Elf64_Xword m_info; /* size + index */ - Elf64_Xword m_poffset; /* symbol offset */ - Elf64_Word m_repeat; /* repeat count */ - Elf64_Word m_stride; /* stride info */ -} Elf64_Move; - -#define ELF64_M_SYM(info) ((info) >> 8) -#define ELF64_M_SIZE(info) ((info) & 0xff) -#define ELF64_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) - -/* - * Hardware/software capabilities entry - */ -typedef struct { - Elf32_Word c_tag; /* entry tag value */ - union { - Elf32_Addr c_ptr; - Elf32_Word c_val; - } c_un; -} Elf32_Cap; + Elf32_Word p_type; /* segment type */ + Elf32_Off p_offset; /* segment offset */ + Elf32_Addr p_vaddr; /* virtual address of segment */ + Elf32_Addr p_paddr; /* physical address - ignored? */ + Elf32_Word p_filesz; /* number of bytes in file for seg. */ + Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ + Elf32_Word p_flags; /* flags */ + Elf32_Word p_align; /* memory alignment */ +} Elf32_Phdr; typedef struct { - Elf64_Xword c_tag; /* entry tag value */ - union { - Elf64_Addr c_ptr; - Elf64_Xword c_val; - } c_un; -} Elf64_Cap; + Elf64_Half p_type; /* entry type */ + Elf64_Half p_flags; /* flags */ + Elf64_Off p_offset; /* offset */ + Elf64_Addr p_vaddr; /* virtual address */ + Elf64_Addr p_paddr; /* physical address */ + Elf64_Xword p_filesz; /* file size */ + Elf64_Xword p_memsz; /* memory size */ + Elf64_Xword p_align; /* memory & file alignment */ +} Elf64_Phdr; -/* - * Dynamic Section structure array - */ +/* Segment types - p_type */ +#define PT_NULL 0 /* unused */ +#define PT_LOAD 1 /* loadable segment */ +#define PT_DYNAMIC 2 /* dynamic linking section */ +#define PT_INTERP 3 /* the RTLD */ +#define PT_NOTE 4 /* auxiliary information */ +#define PT_SHLIB 5 /* reserved - purpose undefined */ +#define PT_PHDR 6 /* program header */ +#define PT_NUM 7 /* Number of segment types */ +#define PT_LOOS 0x60000000 /* reserved range for OS */ +#define PT_HIOS 0x6fffffff /* specific segment types */ +#define PT_LOPROC 0x70000000 /* reserved range for processor */ +#define PT_HIPROC 0x7fffffff /* specific segment types */ + +/* Segment flags - p_flags */ +#define PF_X 0x1 /* Executable */ +#define PF_W 0x2 /* Writable */ +#define PF_R 0x4 /* Readable */ +#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific segment flags */ + +/* Dynamic structure */ typedef struct { - Elf32_Word d_tag; /* entry tag value */ + Elf32_Sword d_tag; /* controls meaning of d_val */ union { - Elf32_Addr d_ptr; - Elf32_Word d_val; + Elf32_Word d_val; /* Multiple meanings - see d_tag */ + Elf32_Addr d_ptr; /* program virtual address */ } d_un; } Elf32_Dyn; typedef struct { - Elf64_Xword d_tag; /* entry tag value */ + Elf64_Xword d_tag; /* controls meaning of d_val */ union { Elf64_Addr d_ptr; Elf64_Xword d_val; } d_un; } Elf64_Dyn; -/* d_tag */ -#define DT_NULL 0 /* Marks end of dynamic array */ -#define DT_NEEDED 1 /* Name of needed library (DT_STRTAB offset) */ -#define DT_PLTRELSZ 2 /* Size, in bytes, of relocations in PLT */ -#define DT_PLTGOT 3 /* Address of PLT and/or GOT */ -#define DT_HASH 4 /* Address of symbol hash table */ -#define DT_STRTAB 5 /* Address of string table */ -#define DT_SYMTAB 6 /* Address of symbol table */ -#define DT_RELA 7 /* Address of Rela relocation table */ -#define DT_RELASZ 8 /* Size, in bytes, of DT_RELA table */ -#define DT_RELAENT 9 /* Size, in bytes, of one DT_RELA entry */ -#define DT_STRSZ 10 /* Size, in bytes, of DT_STRTAB table */ -#define DT_SYMENT 11 /* Size, in bytes, of one DT_SYMTAB entry */ -#define DT_INIT 12 /* Address of initialization function */ -#define DT_FINI 13 /* Address of termination function */ -#define DT_SONAME 14 /* Shared object name (DT_STRTAB offset) */ -#define DT_RPATH 15 /* Library search path (DT_STRTAB offset) */ -#define DT_SYMBOLIC 16 /* Start symbol search within local object */ -#define DT_REL 17 /* Address of Rel relocation table */ -#define DT_RELSZ 18 /* Size, in bytes, of DT_REL table */ -#define DT_RELENT 19 /* Size, in bytes, of one DT_REL entry */ -#define DT_PLTREL 20 /* Type of PLT relocation entries */ -#define DT_DEBUG 21 /* Used for debugging; unspecified */ -#define DT_TEXTREL 22 /* Relocations might modify non-writable seg */ -#define DT_JMPREL 23 /* Address of relocations associated with PLT */ -#define DT_BIND_NOW 24 /* Process all relocations at load-time */ -#define DT_INIT_ARRAY 25 /* Address of initialization function array */ -#define DT_FINI_ARRAY 26 /* Size, in bytes, of DT_INIT_ARRAY array */ -#define DT_INIT_ARRAYSZ 27 /* Address of termination function array */ -#define DT_FINI_ARRAYSZ 28 /* Size, in bytes, of DT_FINI_ARRAY array*/ -#define DT_RUNPATH 29 /* overrides DT_RPATH */ -#define DT_FLAGS 30 /* Encodes ORIGIN, SYMBOLIC, TEXTREL, BIND_NOW, STATIC_TLS */ -#define DT_ENCODING 31 /* ??? */ -#define DT_PREINIT_ARRAY 32 /* Address of pre-init function array */ -#define DT_PREINIT_ARRAYSZ 33 /* Size, in bytes, of DT_PREINIT_ARRAY array */ -#define DT_NUM 34 - -#define DT_LOOS 0x60000000 /* Operating system specific range */ -#define DT_VERSYM 0x6ffffff0 /* Symbol versions */ -#define DT_FLAGS_1 0x6ffffffb /* ELF dynamic flags */ -#define DT_VERDEF 0x6ffffffc /* Versions defined by file */ -#define DT_VERDEFNUM 0x6ffffffd /* Number of versions defined by file */ -#define DT_VERNEED 0x6ffffffe /* Versions needed by file */ -#define DT_VERNEEDNUM 0x6fffffff /* Number of versions needed by file */ -#define DT_HIOS 0x6fffffff -#define DT_LOPROC 0x70000000 /* Processor-specific range */ -#define DT_HIPROC 0x7fffffff - -/* Flag values for DT_FLAGS */ -#define DF_ORIGIN 0x00000001 /* uses $ORIGIN */ -#define DF_SYMBOLIC 0x00000002 /* */ -#define DF_TEXTREL 0x00000004 /* */ -#define DF_BIND_NOW 0x00000008 /* */ -#define DF_STATICT_LS 0x00000010 /* */ - -/* Flag values for DT_FLAGS_1 (incomplete) */ -#define DF_1_BIND_NOW 0x00000001 /* Same as DF_BIND_NOW */ -#define DF_1_NODELETE 0x00000008 /* Set the RTLD_NODELETE for object */ -#define DF_1_INITFIRST 0x00000020 /* Object's init/fini take priority */ -#define DF_1_NOOPEN 0x00000040 /* Do not allow loading on dlopen() */ +/* Dynamic Array Tags - d_tag */ +#define DT_NULL 0 /* marks end of _DYNAMIC array */ +#define DT_NEEDED 1 /* string table offset of needed lib */ +#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ +#define DT_PLTGOT 3 /* address PLT/GOT */ +#define DT_HASH 4 /* address of symbol hash table */ +#define DT_STRTAB 5 /* address of string table */ +#define DT_SYMTAB 6 /* address of symbol table */ +#define DT_RELA 7 /* address of relocation table */ +#define DT_RELASZ 8 /* size of relocation table */ +#define DT_RELAENT 9 /* size of relocation entry */ +#define DT_STRSZ 10 /* size of string table */ +#define DT_SYMENT 11 /* size of symbol table entry */ +#define DT_INIT 12 /* address of initialization func. */ +#define DT_FINI 13 /* address of termination function */ +#define DT_SONAME 14 /* string table offset of shared obj */ +#define DT_RPATH 15 /* string table offset of library + search path */ +#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ +#define DT_REL 17 /* address of rel. tbl. w addends */ +#define DT_RELSZ 18 /* size of DT_REL relocation table */ +#define DT_RELENT 19 /* size of DT_REL relocation entry */ +#define DT_PLTREL 20 /* PLT referenced relocation entry */ +#define DT_DEBUG 21 /* bugger */ +#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ +#define DT_JMPREL 23 /* add. of PLT's relocation entries */ +#define DT_BIND_NOW 24 /* Bind now regardless of env setting */ +#define DT_NUM 25 /* Number used. */ +#define DT_LOPROC 0x70000000 /* reserved range for processor */ +#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ + +/* Standard ELF hashing function */ +unsigned int elf_hash(const unsigned char *name); /* - * Auxiliary Vectors + * Note Definitions */ typedef struct { - Elf32_Word a_type; /* 32-bit id */ - Elf32_Word a_v; /* 32-bit id */ -} Aux32Info; + Elf32_Word namesz; + Elf32_Word descsz; + Elf32_Word type; +} Elf32_Note; typedef struct { - Elf64_Word a_type; /* 32-bit id */ - Elf64_Xword a_v; /* 64-bit id */ -} Aux64Info; - -/* BEGIN android-changed: these constants should come from <linux/auxvec.h>. */ -#if 0 -/* a_type */ -#define AT_NULL 0 /* Marks end of array */ -#define AT_IGNORE 1 /* No meaning, a_un is undefined */ -#define AT_EXECFD 2 /* Open file descriptor of object file */ -#define AT_PHDR 3 /* &phdr[0] */ -#define AT_PHENT 4 /* sizeof(phdr[0]) */ -#define AT_PHNUM 5 /* # phdr entries */ -#define AT_PAGESZ 6 /* PAGESIZE */ -#define AT_BASE 7 /* Interpreter base addr */ -#define AT_FLAGS 8 /* Processor flags */ -#define AT_ENTRY 9 /* Entry address of executable */ -#define AT_DCACHEBSIZE 10 /* Data cache block size */ -#define AT_ICACHEBSIZE 11 /* Instruction cache block size */ -#define AT_UCACHEBSIZE 12 /* Unified cache block size */ -#define AT_STACKBASE 13 /* Base address of the main thread */ - - /* Vendor specific */ -#define AT_MIPS_NOTELF 10 /* XXX a_val != 0 -> MIPS XCOFF executable */ - -#define AT_EUID 2000 /* euid (solaris compatible numbers) */ -#define AT_RUID 2001 /* ruid (solaris compatible numbers) */ -#define AT_EGID 2002 /* egid (solaris compatible numbers) */ -#define AT_RGID 2003 /* rgid (solaris compatible numbers) */ - - /* Solaris kernel specific */ -#define AT_SUN_LDELF 2004 /* dynamic linker's ELF header */ -#define AT_SUN_LDSHDR 2005 /* dynamic linker's section header */ -#define AT_SUN_LDNAME 2006 /* dynamic linker's name */ -#define AT_SUN_LPGSIZE 2007 /* large pagesize */ - - /* Other information */ -#define AT_SUN_PLATFORM 2008 /* sysinfo(SI_PLATFORM) */ -#define AT_SUN_HWCAP 2009 /* process hardware capabilities */ -#define AT_SUN_IFLUSH 2010 /* do we need to flush the instruction cache? */ -#define AT_SUN_CPU 2011 /* CPU name */ - /* ibcs2 emulation band aid */ -#define AT_SUN_EMUL_ENTRY 2012 /* coff entry point */ -#define AT_SUN_EMUL_EXECFD 2013 /* coff file descriptor */ - /* Executable's fully resolved name */ -#define AT_SUN_EXECNAME 2014 -#endif -/* END android-changed */ + Elf64_Half namesz; + Elf64_Half descsz; + Elf64_Half type; +} Elf64_Note; /* - * Note Headers + * XXX - these _KERNEL items aren't part of the ABI! */ -typedef struct { - Elf32_Word n_namesz; - Elf32_Word n_descsz; - Elf32_Word n_type; -} Elf32_Nhdr; - -typedef struct { - Elf64_Word n_namesz; - Elf64_Word n_descsz; - Elf64_Word n_type; -} Elf64_Nhdr; +#if defined(_KERNEL) || defined(_DYN_LOADER) -#define ELF_NOTE_GNU_NAMESZ 4 -#define ELF_NOTE_GNU_NAME "GNU\0" +#define ELF32_NO_ADDR ((u_long) ~0) /* Indicates addr. not yet filled in */ +#define ELF_AUX_ENTRIES 8 /* Size of aux array passed to loader */ -/* - * GNU-specific note type: ABI tag - * name: GNU\0 - * namesz: 4 - * desc: - * word[0]: OS tag - * word[1]: major version - * word[2]: minor version - * word[3]: teeny version - * descsz: 16 - */ -/* GNU-specific note name and description sizes */ -#define ELF_NOTE_TYPE_ABI_TAG 1 -#define ELF_NOTE_ABI_NAME ELF_NOTE_GNU_NAME -#define ELF_NOTE_ABI_NAMESZ ELF_NOTE_GNU_NAMESZ -#define ELF_NOTE_ABI_DESCSZ 16 -/* GNU-specific OS/version value stuff */ -#define ELF_NOTE_ABI_OS_LINUX 0 -#define ELF_NOTE_ABI_OS_HURD 1 -#define ELF_NOTE_ABI_OS_SOLARIS 2 -#define ELF_NOTE_ABI_OS_KFREEBSD 3 -#define ELF_NOTE_ABI_OS_KNETBSD 4 - -/* - * GNU-specific note type: Hardware capabilities - * name: GNU\0 - * namesz: 4 - * desc: - * word[0]: Number of entries - * word[1]: Bitmask of enabled entries - * Followed by a byte id, and a NUL terminated string per entry - * descsz: variable - */ -#define ELF_NOTE_TYPE_GNU_HWCAP 2 - -/* - * GNU-specific note type: Build ID generated by ld - * name: GNU\0 - * desc: - * word[0..4] SHA1 [default] - * or - * word[0..3] md5 or uuid - * descsz: 16 or 20 - */ -#define ELF_NOTE_TYPE_GNU_BUILD_ID 3 +typedef struct { + Elf32_Sword au_id; /* 32-bit id */ + Elf32_Word au_v; /* 32-bit value */ +} Aux32Info; -/* SuSE-specific note type: ABI - * name: SuSE\0 - * namesz: 5 - * desc: - * half[0] = MMmm - * - * M = product major version - * m = product minor version - * descsz: 2 - */ -#define ELF_NOTE_TYPE_SUSE_TAG 1 -/* SuSE-specific note name and description sizes */ -#define ELF_NOTE_SUSE_NAMESZ 5 -#define ELF_NOTE_SUSE_DESCSZ 2 -/* SuSE-specific note name */ -#define ELF_NOTE_SUSE_NAME "SuSE\0" - -/* SuSE-specific note type: version - * name: SuSE\0\0\0\0 - * namesz: 8 - * desc: - * word[0] = VVTTMMmm - * - * V = version of following data - * T = product type: [box, sles, nld, whatever] - * M = product major version - * m = product minor version - * descsz: 8 - */ -#define ELF_NOTE_TYPE_SUSE_VERSION_TAG 0x45537553 /* SuSE in LE */ -/* SuSE-specific note name and description sizes */ -#define ELF_NOTE_SUSE_VERSION_NAMESZ 8 -#define ELF_NOTE_SUSE_VERSION_DESCSZ 8 -/* SuSE-specific note name */ -#define ELF_NOTE_SUSE_VERSION_NAME "SuSE\0\0\0\0" - -/* NetBSD-specific note type: Emulation name. - * name: NetBSD\0\0 - * namesz: 8 - * desc: - * word[0]: MMmmrrpp00 - * - * M = major version - * m = minor version - * r = release ["",A-Z,Z[A-Z] but numeric] - * p = patchlevel - * descsz: 4 - */ -#define ELF_NOTE_TYPE_NETBSD_TAG 1 -/* NetBSD-specific note name and description sizes */ -#define ELF_NOTE_NETBSD_NAMESZ 7 -#define ELF_NOTE_NETBSD_DESCSZ 4 -/* NetBSD-specific note name */ -#define ELF_NOTE_NETBSD_NAME "NetBSD\0\0" - -/* NetBSD-specific note type: Checksum. - * There should be 1 NOTE per PT_LOAD section. - * name: ??? - * namesz: ??? - * desc: - * a tuple of <phnum>(16),<chk-type>(16),<chk-value>. - * descsz: ??? - */ -#define ELF_NOTE_TYPE_CHECKSUM_TAG 2 -#define ELF_NOTE_CHECKSUM_CRC32 1 -#define ELF_NOTE_CHECKSUM_MD5 2 -#define ELF_NOTE_CHECKSUM_SHA1 3 -#define ELF_NOTE_CHECKSUM_SHA256 4 +#define ELF64_NO_ADDR ((__uint64_t) ~0)/* Indicates addr. not yet filled in */ +#define ELF64_AUX_ENTRIES 8 /* Size of aux array passed to loader */ -/* - * NetBSD-specific note type: PaX. - * There should be 1 NOTE per executable. - * name: PaX\0 - * namesz: 4 - * desc: - * word[0]: capability bitmask - * descsz: 4 - */ -#define ELF_NOTE_TYPE_PAX_TAG 3 -#define ELF_NOTE_PAX_MPROTECT 0x01 /* Force enable Mprotect */ -#define ELF_NOTE_PAX_NOMPROTECT 0x02 /* Force disable Mprotect */ -#define ELF_NOTE_PAX_GUARD 0x04 /* Force enable Segvguard */ -#define ELF_NOTE_PAX_NOGUARD 0x08 /* Force disable Servguard */ -#define ELF_NOTE_PAX_ASLR 0x10 /* Force enable ASLR */ -#define ELF_NOTE_PAX_NOASLR 0x20 /* Force disable ASLR */ -#define ELF_NOTE_PAX_NAMESZ 4 -#define ELF_NOTE_PAX_NAME "PaX\0" -#define ELF_NOTE_PAX_DESCSZ 4 +typedef struct { + Elf64_Shalf au_id; /* 32-bit id */ + Elf64_Xword au_v; /* 64-bit id */ +} Aux64Info; -/* - * NetBSD-specific core file information. - * - * NetBSD ELF core files use notes to provide information about - * the process's state. The note name is "NetBSD-CORE" for - * information that is global to the process, and "NetBSD-CORE@nn", - * where "nn" is the lwpid of the LWP that the information belongs - * to (such as register state). - * - * We use the following note identifiers: - * - * ELF_NOTE_NETBSD_CORE_PROCINFO - * Note is a "netbsd_elfcore_procinfo" structure. - * - * We also use ptrace(2) request numbers (the ones that exist in - * machine-dependent space) to identify register info notes. The - * info in such notes is in the same format that ptrace(2) would - * export that information. - * - * Please try to keep the members of this structure nicely aligned, - * and if you add elements, add them to the end and bump the version. - */ +enum AuxID { + AUX_null = 0, + AUX_ignore = 1, + AUX_execfd = 2, + AUX_phdr = 3, /* &phdr[0] */ + AUX_phent = 4, /* sizeof(phdr[0]) */ + AUX_phnum = 5, /* # phdr entries */ + AUX_pagesz = 6, /* PAGESIZE */ + AUX_base = 7, /* ld.so base addr */ + AUX_flags = 8, /* processor flags */ + AUX_entry = 9, /* a.out entry */ + AUX_sun_uid = 2000, /* euid */ + AUX_sun_ruid = 2001, /* ruid */ + AUX_sun_gid = 2002, /* egid */ + AUX_sun_rgid = 2003 /* rgid */ +}; -#define ELF_NOTE_NETBSD_CORE_NAME "NetBSD-CORE" - -#define ELF_NOTE_NETBSD_CORE_PROCINFO 1 - -#define NETBSD_ELFCORE_PROCINFO_VERSION 1 - -struct netbsd_elfcore_procinfo { - /* Version 1 fields start here. */ - uint32_t cpi_version; /* our version */ - uint32_t cpi_cpisize; /* sizeof(this struct) */ - uint32_t cpi_signo; /* killing signal */ - uint32_t cpi_sigcode; /* signal code */ - uint32_t cpi_sigpend[4]; /* pending signals */ - uint32_t cpi_sigmask[4]; /* blocked signals */ - uint32_t cpi_sigignore[4]; /* ignored signals */ - uint32_t cpi_sigcatch[4]; /* caught signals */ - int32_t cpi_pid; /* process ID */ - int32_t cpi_ppid; /* parent process ID */ - int32_t cpi_pgrp; /* process group ID */ - int32_t cpi_sid; /* session ID */ - uint32_t cpi_ruid; /* real user ID */ - uint32_t cpi_euid; /* effective user ID */ - uint32_t cpi_svuid; /* saved user ID */ - uint32_t cpi_rgid; /* real group ID */ - uint32_t cpi_egid; /* effective group ID */ - uint32_t cpi_svgid; /* saved group ID */ - uint32_t cpi_nlwps; /* number of LWPs */ - int8_t cpi_name[32]; /* copy of p->p_comm */ - /* Add version 2 fields below here. */ - int32_t cpi_siglwp; /* LWP target of killing signal */ +struct elf_args { + u_long arg_entry; /* program entry point */ + u_long arg_interp; /* Interpreter load address */ + u_long arg_phaddr; /* program header address */ + u_long arg_phentsize; /* Size of program header */ + u_long arg_phnum; /* Number of program headers */ + u_long arg_os; /* OS tag */ }; -/* - * NetBSD-specific note type: MACHINE_ARCH. - * There should be 1 NOTE per executable. - * name: NetBSD\0 - * namesz: 7 - * desc: string - * descsz: variable - */ -#define ELF_NOTE_TYPE_MARCH_TAG 5 -/* NetBSD-specific note name and description sizes */ -#define ELF_NOTE_MARCH_NAMESZ ELF_NOTE_NETBSD_NAMESZ -/* NetBSD-specific note name */ -#define ELF_NOTE_MARCH_NAME ELF_NOTE_NETBSD_NAME +#endif #if !defined(ELFSIZE) && defined(ARCH_ELFSIZE) #define ELFSIZE ARCH_ELFSIZE @@ -1025,25 +546,25 @@ struct netbsd_elfcore_procinfo { #define Elf_Shdr Elf32_Shdr #define Elf_Sym Elf32_Sym #define Elf_Rel Elf32_Rel -#define Elf_Rela Elf32_Rela +#define Elf_RelA Elf32_Rela #define Elf_Dyn Elf32_Dyn +#define Elf_Half Elf32_Half #define Elf_Word Elf32_Word #define Elf_Sword Elf32_Sword -#define Elf_Half Elf32_Half #define Elf_Addr Elf32_Addr #define Elf_Off Elf32_Off -#define Elf_SOff Elf32_SOff #define Elf_Nhdr Elf32_Nhdr -#define Elf_Verdef Elf32_Verdef -#define Elf_Verdaux Elf32_Verdaux -#define Elf_Verneed Elf32_Verneed -#define Elf_Vernaux Elf32_Vernaux -#define Elf_Versym Elf32_Versym +#define Elf_Note Elf32_Note #define ELF_R_SYM ELF32_R_SYM #define ELF_R_TYPE ELF32_R_TYPE +#define ELF_R_INFO ELF32_R_INFO #define ELFCLASS ELFCLASS32 +#define ELF_ST_BIND ELF32_ST_BIND +#define ELF_ST_TYPE ELF32_ST_TYPE +#define ELF_ST_INFO ELF32_ST_INFO + #define AuxInfo Aux32Info #elif defined(ELFSIZE) && (ELFSIZE == 64) #define Elf_Ehdr Elf64_Ehdr @@ -1051,237 +572,54 @@ struct netbsd_elfcore_procinfo { #define Elf_Shdr Elf64_Shdr #define Elf_Sym Elf64_Sym #define Elf_Rel Elf64_Rel -#define Elf_Rela Elf64_Rela +#define Elf_RelA Elf64_Rela #define Elf_Dyn Elf64_Dyn +#define Elf_Half Elf64_Half #define Elf_Word Elf64_Word #define Elf_Sword Elf64_Sword -#define Elf_Half Elf64_Half #define Elf_Addr Elf64_Addr #define Elf_Off Elf64_Off -#define Elf_SOff Elf64_SOff #define Elf_Nhdr Elf64_Nhdr -#define Elf_Verdef Elf64_Verdef -#define Elf_Verdaux Elf64_Verdaux -#define Elf_Verneed Elf64_Verneed -#define Elf_Vernaux Elf64_Vernaux -#define Elf_Versym Elf64_Versym +#define Elf_Note Elf64_Note #define ELF_R_SYM ELF64_R_SYM #define ELF_R_TYPE ELF64_R_TYPE +#define ELF_R_INFO ELF64_R_INFO #define ELFCLASS ELFCLASS64 -#define AuxInfo Aux64Info -#endif - -#ifndef Elf_Symindx -#define Elf_Symindx uint32_t -#endif - -#define ELF32_ST_BIND(info) ELF_ST_BIND(info) -#define ELF32_ST_TYPE(info) ELF_ST_TYPE(info) -#define ELF32_ST_INFO(bind,type) ELF_ST_INFO(bind,type) -#define ELF32_ST_VISIBILITY(other) ELF_ST_VISIBILITY(other) - -#define ELF64_ST_BIND(info) ELF_ST_BIND(info) -#define ELF64_ST_TYPE(info) ELF_ST_TYPE(info) -#define ELF64_ST_INFO(bind,type) ELF_ST_INFO(bind,type) -#define ELF64_ST_VISIBILITY(other) ELF_ST_VISIBILITY(other) - -typedef struct { - Elf32_Half si_boundto; /* direct bindings - symbol bound to */ - Elf32_Half si_flags; /* per symbol flags */ -} Elf32_Syminfo; +#define ELF_ST_BIND ELF64_ST_BIND +#define ELF_ST_TYPE ELF64_ST_TYPE +#define ELF_ST_INFO ELF64_ST_INFO -typedef struct { - Elf64_Word si_boundto; /* direct bindings - symbol bound to */ - Elf64_Word si_flags; /* per symbol flags */ -} Elf64_Syminfo; - -#define SYMINFO_FLG_DIRECT 0x0001 /* symbol ref has direct association - to object containing definition */ -#define SYMINFO_FLG_PASSTHRU 0x0002 /* ignored - see SYMINFO_FLG_FILTER */ -#define SYMINFO_FLG_COPY 0x0004 /* symbol is a copy-reloc */ -#define SYMINFO_FLG_LAZYLOAD 0x0008 /* object containing defn should be - lazily-loaded */ -#define SYMINFO_FLG_DIRECTBIND 0x0010 /* ref should be bound directly to - object containing definition */ -#define SYMINFO_FLG_NOEXTDIRECT 0x0020 /* don't let an external reference - directly bind to this symbol */ -#define SYMINFO_FLG_FILTER 0x0002 /* symbol ref is associated to a */ -#define SYMINFO_FLG_AUXILIARY 0x0040 /* standard or auxiliary filter */ - -#define SYMINFO_BT_SELF 0xffff /* symbol bound to self */ -#define SYMINFO_BT_PARENT 0xfffe /* symbol bound to parent */ -#define SYMINFO_BT_NONE 0xfffd /* no special symbol binding */ -#define SYMINFO_BT_EXTERN 0xfffc /* symbol defined as external */ -#define SYMINFO_BT_LOWRESERVE 0xff00 /* beginning of reserved entries */ - -#define SYMINFO_NONE 0 /* Syminfo version */ -#define SYMINFO_CURRENT 1 -#define SYMINFO_NUM 2 - -/* - * These constants are used for Elf32_Verdef struct's version number. - */ -#define VER_DEF_NONE 0 -#define VER_DEF_CURRENT 1 - -/* - * These constants are used for Elf32_Verdef struct's vd_ndx. - */ -#define VER_DEF_IDX(x) VER_NDX(x) - -/* - * These constants are used for Elf32_Verdef struct's vd_flags. - */ -#define VER_FLG_BASE 0x1 -#define VER_FLG_WEAK 0x2 - -/* - * These are used in an Elf32_Versym field. - */ -#define VER_NDX_LOCAL 0 -#define VER_NDX_GLOBAL 1 -#define VER_NDX_GIVEN 2 - -/* - * These constants are used for Elf32_Verneed struct's version number. - */ -#define VER_NEED_NONE 0 -#define VER_NEED_CURRENT 1 - -/* - * These constants are used for Elf32_Vernaux struct's vna_other. - */ -#define VER_NEED_HIDDEN VER_NDX_HIDDEN -#define VER_NEED_IDX(x) VER_NDX(x) - -/* index */ -#define VER_NDX_HIDDEN 0x8000 -#define VER_NDX(x) ((x) & ~VER_NDX_HIDDEN) - -/* - * GNU Extension hidding symbol - */ -#define VERSYM_HIDDEN 0x8000 -#define VERSYM_VERSION 0x7fff - -#define ELF_VER_CHR '@' - -/* - * These are current size independent. - */ - -typedef struct { - Elf32_Half vd_version; /* version number of structure */ - Elf32_Half vd_flags; /* flags (VER_FLG_*) */ - Elf32_Half vd_ndx; /* version index */ - Elf32_Half vd_cnt; /* number of verdaux entries */ - Elf32_Word vd_hash; /* hash of name */ - Elf32_Word vd_aux; /* offset to verdaux entries */ - Elf32_Word vd_next; /* offset to next verdef */ -} Elf32_Verdef; -typedef Elf32_Verdef Elf64_Verdef; - -typedef struct { - Elf32_Word vda_name; /* string table offset of name */ - Elf32_Word vda_next; /* offset to verdaux */ -} Elf32_Verdaux; -typedef Elf32_Verdaux Elf64_Verdaux; - -typedef struct { - Elf32_Half vn_version; /* version number of structure */ - Elf32_Half vn_cnt; /* number of vernaux entries */ - Elf32_Word vn_file; /* string table offset of library name*/ - Elf32_Word vn_aux; /* offset to vernaux entries */ - Elf32_Word vn_next; /* offset to next verneed */ -} Elf32_Verneed; -typedef Elf32_Verneed Elf64_Verneed; - -typedef struct { - Elf32_Word vna_hash; /* Hash of dependency name */ - Elf32_Half vna_flags; /* flags (VER_FLG_*) */ - Elf32_Half vna_other; /* unused */ - Elf32_Word vna_name; /* string table offset to version name*/ - Elf32_Word vna_next; /* offset to next vernaux */ -} Elf32_Vernaux; -typedef Elf32_Vernaux Elf64_Vernaux; - -typedef struct { - Elf32_Half vs_vers; -} Elf32_Versym; -typedef Elf32_Versym Elf64_Versym; - -#ifdef _KERNEL - -#define ELF_AUX_ENTRIES 15 /* Max size of aux array passed to loader */ -#define ELF32_NO_ADDR (~(Elf32_Addr)0) /* Indicates addr. not yet filled in */ -#define ELF32_LINK_ADDR ((Elf32_Addr)-2) /* advises to use link address */ -#define ELF64_NO_ADDR (~(Elf64_Addr)0) /* Indicates addr. not yet filled in */ -#define ELF64_LINK_ADDR ((Elf64_Addr)-2) /* advises to use link address */ - -#if defined(ELFSIZE) && (ELFSIZE == 64) -#define ELF_NO_ADDR ELF64_NO_ADDR -#define ELF_LINK_ADDR ELF64_LINK_ADDR -#elif defined(ELFSIZE) && (ELFSIZE == 32) -#define ELF_NO_ADDR ELF32_NO_ADDR -#define ELF_LINK_ADDR ELF32_LINK_ADDR -#endif - -#ifndef ELF32_EHDR_FLAGS_OK -#define ELF32_EHDR_FLAGS_OK(eh) 1 -#endif - -#ifndef ELF64_EHDR_FLAGS_OK -#define ELF64_EHDR_FLAGS_OK(eh) 1 -#endif - -#if defined(ELFSIZE) && (ELFSIZE == 64) -#define ELF_EHDR_FLAGS_OK(eh) ELF64_EHDR_FLAGS_OK(eh) -#else -#define ELF_EHDR_FLAGS_OK(eh) ELF32_EHDR_FLAGS_OK(eh) -#endif - -#if defined(ELFSIZE) -struct elf_args { - Elf_Addr arg_entry; /* program entry point */ - Elf_Addr arg_interp; /* Interpreter load address */ - Elf_Addr arg_phaddr; /* program header address */ - Elf_Addr arg_phentsize; /* Size of program header */ - Elf_Addr arg_phnum; /* Number of program headers */ -}; +#define AuxInfo Aux64Info #endif -#ifdef _KERNEL_OPT -#include "opt_execfmt.h" +#ifndef _KERNEL +extern Elf_Dyn _DYNAMIC[]; #endif -struct ps_strings; - -#ifdef EXEC_ELF32 -int exec_elf32_makecmds(struct lwp *, struct exec_package *); -int elf32_copyargs(struct lwp *, struct exec_package *, - struct ps_strings *, char **, void *); - -int coredump_elf32(struct lwp *, void *); -int coredump_writenote_elf32(struct proc *, void *, Elf32_Nhdr *, - const char *, void *); - -int elf32_check_header(Elf32_Ehdr *, int); +#ifdef _KERNEL +#ifdef _KERN_DO_ELF64 +int exec_elf64_makecmds(struct proc *, struct exec_package *); +void *elf64_copyargs(struct exec_package *, struct ps_strings *, + void *, void *); +int exec_elf64_fixup(struct proc *, struct exec_package *); +char *elf64_check_brand(Elf64_Ehdr *); +int elf64_os_pt_note(struct proc *, struct exec_package *, Elf64_Ehdr *, + char *, size_t, size_t); #endif - -#ifdef EXEC_ELF64 -int exec_elf64_makecmds(struct lwp *, struct exec_package *); -int elf64_copyargs(struct lwp *, struct exec_package *, - struct ps_strings *, char **, void *); - -int coredump_elf64(struct lwp *, void *); -int coredump_writenote_elf64(struct proc *, void *, Elf64_Nhdr *, - const char *, void *); - -int elf64_check_header(Elf64_Ehdr *, int); +#ifdef _KERN_DO_ELF +int exec_elf32_makecmds(struct proc *, struct exec_package *); +void *elf32_copyargs(struct exec_package *, struct ps_strings *, + void *, void *); +int exec_elf32_fixup(struct proc *, struct exec_package *); +char *elf32_check_brand(Elf32_Ehdr *); +int elf32_os_pt_note(struct proc *, struct exec_package *, Elf32_Ehdr *, + char *, size_t, size_t); #endif #endif /* _KERNEL */ -#endif /* !_SYS_EXEC_ELF_H_ */ +#define ELF_TARG_VER 1 /* The ver for which this code is intended */ + +#endif /* _SYS_EXEC_ELF_H_ */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/klog.h b/9/platforms/android-19/arch-mips64/usr/include/sys/klog.h index 02851d2..acfaa20 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/klog.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/klog.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_KLOG_H_ #define _SYS_KLOG_H_ @@ -45,13 +46,6 @@ __BEGIN_DECLS #define KLOG_SIZE_UNREAD 9 #define KLOG_SIZE_BUFFER 10 -/* These are deprecated names that were used in earlier bionic releases. Do not use. */ -#define KLOG_DISABLE 6 -#define KLOG_ENABLE 7 -#define KLOG_SETLEVEL 8 -#define KLOG_UNREADSIZE 9 -#define KLOG_WRITE 10 - extern int klogctl(int, char *, int); __END_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/mman.h b/9/platforms/android-19/arch-mips64/usr/include/sys/mman.h index 7c5f8d7..5a8c985 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/mman.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/mman.h @@ -31,7 +31,6 @@ #include <sys/cdefs.h> #include <sys/types.h> #include <asm/mman.h> -#include <asm/page.h> __BEGIN_DECLS @@ -44,23 +43,23 @@ __BEGIN_DECLS #define MREMAP_MAYMOVE 1 #define MREMAP_FIXED 2 -extern void* mmap(void *, size_t, int, int, int, off_t); -extern void* mmap64(void *, size_t, int, int, int, off64_t); -extern int munmap(void *, size_t); -extern int msync(const void *, size_t, int); -extern int mprotect(const void *, size_t, int); -extern void* mremap(void *, size_t, size_t, unsigned long); +extern void* mmap(void*, size_t, int, int, int, off_t); +extern void* mmap64(void*, size_t, int, int, int, off64_t); +extern int munmap(void*, size_t); +extern int msync(const void*, size_t, int); +extern int mprotect(const void*, size_t, int); +extern void* mremap(void*, size_t, size_t, unsigned long); -extern int mlockall(int); -extern int munlockall(void); -extern int mlock(const void *, size_t); -extern int munlock(const void *, size_t); -extern int madvise(const void *, size_t, int); +extern int mlockall(int); +extern int munlockall(void); +extern int mlock(const void*, size_t); +extern int munlock(const void*, size_t); +extern int madvise(const void*, size_t, int); -extern int mlock(const void *addr, size_t len); -extern int munlock(const void *addr, size_t len); +extern int mlock(const void*, size_t); +extern int munlock(const void*, size_t); -extern int mincore(void* start, size_t length, unsigned char* vec); +extern int mincore(void*, size_t, unsigned char*); __END_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/socket.h b/9/platforms/android-19/arch-mips64/usr/include/sys/socket.h index 32d98ea..62a5300 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/socket.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/socket.h @@ -43,8 +43,9 @@ __BEGIN_DECLS #define sockaddr_storage __kernel_sockaddr_storage -typedef __sa_family_t sa_family_t; -typedef int socklen_t; +typedef unsigned short sa_family_t; + +struct timespec; #ifdef __mips__ #define SOCK_DGRAM 1 @@ -76,40 +77,45 @@ enum { }; struct sockaddr { - sa_family_t sa_family; - char sa_data[14]; + sa_family_t sa_family; + char sa_data[14]; }; struct linger { - int l_onoff; - int l_linger; + int l_onoff; + int l_linger; }; struct msghdr { - void * msg_name; - int msg_namelen; - struct iovec * msg_iov; - __kernel_size_t msg_iovlen; - void * msg_control; - __kernel_size_t msg_controllen; - unsigned msg_flags; + void* msg_name; + socklen_t msg_namelen; + struct iovec* msg_iov; + size_t msg_iovlen; + void* msg_control; + size_t msg_controllen; + int msg_flags; +}; + +struct mmsghdr { + struct msghdr msg_hdr; + unsigned int msg_len; }; struct cmsghdr { - __kernel_size_t cmsg_len; - int cmsg_level; - int cmsg_type; + size_t cmsg_len; + int cmsg_level; + int cmsg_type; }; #define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg)) #define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg)) #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) -#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) +#define CMSG_DATA(cmsg) ((void*)((char*)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) #define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) #define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) -#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? (struct cmsghdr *)(ctl) : (struct cmsghdr *)NULL) +#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? (struct cmsghdr*)(ctl) : (struct cmsghdr*)NULL) #define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen) -#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && (cmsg)->cmsg_len <= (unsigned long) ((mhdr)->msg_controllen - ((char *)(cmsg) - (char *)(mhdr)->msg_control))) +#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && (cmsg)->cmsg_len <= (unsigned long) ((mhdr)->msg_controllen - ((char*)(cmsg) - (char*)(mhdr)->msg_control))) #ifdef __GNUC__ #define __KINLINE static __inline__ @@ -119,16 +125,17 @@ struct cmsghdr { #define __KINLINE static #endif -__KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size, struct cmsghdr *__cmsg) { - struct cmsghdr * __ptr; - __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len)); - if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size) - return (struct cmsghdr *)0; - return __ptr; +__KINLINE struct cmsghdr* __cmsg_nxthdr(void* __ctl, size_t __size, struct cmsghdr* __cmsg) { + struct cmsghdr* __ptr; + __ptr = (struct cmsghdr*)(((unsigned char*) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len)); + if ((unsigned long)((char*)(__ptr+1) - (char*) __ctl) > __size) { + return NULL; + } + return __ptr; } -__KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg) { - return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); +__KINLINE struct cmsghdr* cmsg_nxthdr (struct msghdr* __msg, struct cmsghdr* __cmsg) { + return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); } #define SCM_RIGHTS 0x01 @@ -136,9 +143,9 @@ __KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__ #define SCM_SECURITY 0x03 struct ucred { - __u32 pid; - __u32 uid; - __u32 gid; + pid_t pid; + uid_t uid; + gid_t gid; }; #define AF_UNSPEC 0 @@ -242,6 +249,9 @@ struct ucred { #define MSG_ERRQUEUE 0x2000 #define MSG_NOSIGNAL 0x4000 #define MSG_MORE 0x8000 +#define MSG_WAITFORONE 0x10000 +#define MSG_FASTOPEN 0x20000000 +#define MSG_CMSG_CLOEXEC 0x40000000 #define MSG_EOF MSG_FIN #define MSG_CMSG_COMPAT 0 @@ -277,43 +287,45 @@ struct ucred { # define __socketcall extern #endif -__socketcall int socket(int, int, int); -__socketcall int bind(int, const struct sockaddr *, int); -__socketcall int connect(int, const struct sockaddr *, socklen_t); +__socketcall int accept(int, struct sockaddr*, socklen_t*); +__socketcall int bind(int, const struct sockaddr*, int); +__socketcall int connect(int, const struct sockaddr*, socklen_t); +__socketcall int getpeername(int, struct sockaddr*, socklen_t*); +__socketcall int getsockname(int, struct sockaddr*, socklen_t*); +__socketcall int getsockopt(int, int, int, void*, socklen_t*); __socketcall int listen(int, int); -__socketcall int accept(int, struct sockaddr *, socklen_t *); -__socketcall int getsockname(int, struct sockaddr *, socklen_t *); -__socketcall int getpeername(int, struct sockaddr *, socklen_t *); -__socketcall int socketpair(int, int, int, int *); +__socketcall int recvmmsg(int, struct mmsghdr*, unsigned int, int, const struct timespec*); +__socketcall int recvmsg(int, struct msghdr*, int); +__socketcall int sendmmsg(int, const struct mmsghdr*, unsigned int, int); +__socketcall int sendmsg(int, const struct msghdr*, int); +__socketcall int setsockopt(int, int, int, const void*, socklen_t); __socketcall int shutdown(int, int); -__socketcall int setsockopt(int, int, int, const void *, socklen_t); -__socketcall int getsockopt(int, int, int, void *, socklen_t *); -__socketcall int sendmsg(int, const struct msghdr *, unsigned int); -__socketcall int recvmsg(int, struct msghdr *, unsigned int); +__socketcall int socket(int, int, int); +__socketcall int socketpair(int, int, int, int*); -extern ssize_t send(int, const void *, size_t, unsigned int); -extern ssize_t recv(int, void *, size_t, unsigned int); +extern ssize_t send(int, const void*, size_t, int); +extern ssize_t recv(int, void*, size_t, int); -__socketcall ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t); -__socketcall ssize_t recvfrom(int, void *, size_t, unsigned int, const struct sockaddr *, socklen_t *); +__socketcall ssize_t sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t); +__socketcall ssize_t recvfrom(int, void*, size_t, int, const struct sockaddr*, socklen_t*); #if defined(__BIONIC_FORTIFY) __errordecl(__recvfrom_error, "recvfrom called with size bigger than buffer"); -extern ssize_t __recvfrom_chk(int, void*, size_t, size_t, unsigned int, const struct sockaddr*, socklen_t *); -extern ssize_t __recvfrom_real(int, void *, size_t, unsigned int, const struct sockaddr*, socklen_t*) +extern ssize_t __recvfrom_chk(int, void*, size_t, size_t, int, const struct sockaddr*, socklen_t*); +extern ssize_t __recvfrom_real(int, void*, size_t, int, const struct sockaddr*, socklen_t*) __asm__(__USER_LABEL_PREFIX__ "recvfrom"); __BIONIC_FORTIFY_INLINE -ssize_t recvfrom(int fd, void* buf, size_t len, unsigned int flags, const struct sockaddr* src_addr, socklen_t* addrlen) { +ssize_t recvfrom(int fd, void* buf, size_t len, int flags, const struct sockaddr* src_addr, socklen_t* addr_len) { size_t bos = __bos0(buf); #if !defined(__clang__) if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) { - return __recvfrom_real(fd, buf, len, flags, src_addr, addrlen); + return __recvfrom_real(fd, buf, len, flags, src_addr, addr_len); } if (__builtin_constant_p(len) && (len <= bos)) { - return __recvfrom_real(fd, buf, len, flags, src_addr, addrlen); + return __recvfrom_real(fd, buf, len, flags, src_addr, addr_len); } if (__builtin_constant_p(len) && (len > bos)) { @@ -321,12 +333,12 @@ ssize_t recvfrom(int fd, void* buf, size_t len, unsigned int flags, const struct } #endif - return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addrlen); + return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addr_len); } __BIONIC_FORTIFY_INLINE -ssize_t recv(int socket, void *buf, size_t buflen, unsigned int flags) { - return recvfrom(socket, buf, buflen, flags, NULL, 0); +ssize_t recv(int socket, void* buf, size_t len, int flags) { + return recvfrom(socket, buf, len, flags, NULL, 0); } #endif /* __BIONIC_FORTIFY */ diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/stat.h b/9/platforms/android-19/arch-mips64/usr/include/sys/stat.h index 37b8dc2..e62e76d 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/stat.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/stat.h @@ -38,101 +38,101 @@ __BEGIN_DECLS #if defined(__aarch64__) -struct stat { - unsigned long st_dev; - unsigned long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned long st_rdev; - unsigned long __pad1; - long st_size; - int st_blksize; - int __pad2; - long st_blocks; - long st_atime; - unsigned long st_atime_nsec; - long st_mtime; - unsigned long st_mtime_nsec; - long st_ctime; - unsigned long st_ctime_nsec; - unsigned int __unused4; - unsigned int __unused5; -}; +#define __STAT64_BODY \ + unsigned long st_dev; \ + unsigned long st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned long st_rdev; \ + unsigned long __pad1; \ + long st_size; \ + int st_blksize; \ + int __pad2; \ + long st_blocks; \ + long st_atime; \ + unsigned long st_atime_nsec; \ + long st_mtime; \ + unsigned long st_mtime_nsec; \ + long st_ctime; \ + unsigned long st_ctime_nsec; \ + unsigned int __unused4; \ + unsigned int __unused5; \ + #elif defined(__mips__) -struct stat { - unsigned int st_dev; - unsigned int __pad0[3]; - unsigned long long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - unsigned int __pad1[3]; - long long st_size; - unsigned int st_atime; - unsigned int st_atime_nsec; - unsigned int st_mtime; - unsigned int st_mtime_nsec; - unsigned int st_ctime; - unsigned int st_ctime_nsec; - unsigned int st_blksize; - unsigned int __pad2; - unsigned long long st_blocks; -}; +#define __STAT64_BODY \ + unsigned int st_dev; \ + unsigned int __pad0[3]; \ + unsigned long long st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned int st_rdev; \ + unsigned int __pad1[3]; \ + long long st_size; \ + unsigned int st_atime; \ + unsigned int st_atime_nsec; \ + unsigned int st_mtime; \ + unsigned int st_mtime_nsec; \ + unsigned int st_ctime; \ + unsigned int st_ctime_nsec; \ + unsigned int st_blksize; \ + unsigned int __pad2; \ + unsigned long long st_blocks; \ + #elif defined(__x86_64__) -struct stat { - unsigned long st_dev; - unsigned long st_ino; - unsigned long st_nlink; - unsigned int st_mode; - unsigned int st_uid; - unsigned int st_gid; - unsigned int __pad0; - unsigned long st_rdev; - long st_size; - long st_blksize; - long st_blocks; - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; - unsigned long st_mtime_nsec; - unsigned long st_ctime; - unsigned long st_ctime_nsec; - long __pad3[3]; -}; +#define __STAT64_BODY \ + unsigned long st_dev; \ + unsigned long st_ino; \ + unsigned long st_nlink; \ + unsigned int st_mode; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned int __pad0; \ + unsigned long st_rdev; \ + long st_size; \ + long st_blksize; \ + long st_blocks; \ + unsigned long st_atime; \ + unsigned long st_atime_nsec; \ + unsigned long st_mtime; \ + unsigned long st_mtime_nsec; \ + unsigned long st_ctime; \ + unsigned long st_ctime_nsec; \ + long __pad3[3]; \ + #else -struct stat { - unsigned long long st_dev; - unsigned char __pad0[4]; - unsigned long __st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned long st_uid; - unsigned long st_gid; - unsigned long long st_rdev; - unsigned char __pad3[4]; - long long st_size; - unsigned long st_blksize; - unsigned long long st_blocks; - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; - unsigned long st_mtime_nsec; - unsigned long st_ctime; - unsigned long st_ctime_nsec; - unsigned long long st_ino; -}; +#define __STAT64_BODY \ + unsigned long long st_dev; \ + unsigned char __pad0[4]; \ + unsigned long __st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned long long st_rdev; \ + unsigned char __pad3[4]; \ + long long st_size; \ + unsigned long st_blksize; \ + unsigned long long st_blocks; \ + unsigned long st_atime; \ + unsigned long st_atime_nsec; \ + unsigned long st_mtime; \ + unsigned long st_mtime_nsec; \ + unsigned long st_ctime; \ + unsigned long st_ctime_nsec; \ + unsigned long long st_ino; \ + #endif -/* For compatibility with GLibc, we provide macro aliases - * for the non-Posix nano-seconds accessors. - */ -#define st_atimensec st_atime_nsec -#define st_mtimensec st_mtime_nsec -#define st_ctimensec st_ctime_nsec +struct stat { __STAT64_BODY }; +struct stat64 { __STAT64_BODY }; + +#define st_atimensec st_atime_nsec +#define st_mtimensec st_mtime_nsec +#define st_ctimensec st_ctime_nsec #ifdef __USE_BSD /* Permission macros provided by glibc for compatibility with BSDs. */ @@ -141,21 +141,26 @@ struct stat { #define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */ #endif -extern int chmod(const char *, mode_t); -extern int fchmod(int, mode_t); -extern int mkdir(const char *, mode_t); +extern int chmod(const char*, mode_t); +extern int fchmod(int, mode_t); +extern int mkdir(const char*, mode_t); -extern int stat(const char *, struct stat *); -extern int fstat(int, struct stat *); -extern int lstat(const char *, struct stat *); -extern int mknod(const char *, mode_t, dev_t); +extern int fstat(int, struct stat*); +extern int fstat64(int, struct stat64*); +extern int fstatat(int, const char*, struct stat*, int); +extern int fstatat64(int, const char*, struct stat64*, int); +extern int lstat(const char*, struct stat*); +extern int lstat64(const char*, struct stat64*); +extern int stat(const char*, struct stat*); +extern int stat64(const char*, struct stat64*); + +extern int mknod(const char*, mode_t, dev_t); extern mode_t umask(mode_t); #if defined(__BIONIC_FORTIFY) extern mode_t __umask_chk(mode_t); -extern mode_t __umask_real(mode_t) - __asm__(__USER_LABEL_PREFIX__ "umask"); +extern mode_t __umask_real(mode_t) __asm__(__USER_LABEL_PREFIX__ "umask"); __errordecl(__umask_invalid_mode, "umask called with invalid mode"); __BIONIC_FORTIFY_INLINE @@ -172,20 +177,14 @@ mode_t umask(mode_t mode) { } #endif /* defined(__BIONIC_FORTIFY) */ - -#define stat64 stat -#define fstat64 fstat -#define lstat64 lstat - extern int mkfifo(const char*, mode_t); extern int fchmodat(int, const char*, mode_t, int); -extern int fstatat(int, const char*, struct stat*, int); extern int mkdirat(int, const char*, mode_t); extern int mknodat(int, const char*, mode_t, dev_t); -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) +#define UTIME_NOW ((1L << 30) - 1L) +#define UTIME_OMIT ((1L << 30) - 2L) extern int utimensat(int fd, const char *path, const struct timespec times[2], int flags); extern int futimens(int fd, const struct timespec times[2]); diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/statvfs.h b/9/platforms/android-19/arch-mips64/usr/include/sys/statvfs.h index e910c03..3d8179e 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/statvfs.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/statvfs.h @@ -23,19 +23,21 @@ __BEGIN_DECLS -struct statvfs { - unsigned long f_bsize; - unsigned long f_frsize; - fsblkcnt_t f_blocks; - fsblkcnt_t f_bfree; - fsblkcnt_t f_bavail; - fsfilcnt_t f_files; - fsfilcnt_t f_ffree; - fsfilcnt_t f_favail; - unsigned long f_fsid; - unsigned long f_flag; - unsigned long f_namemax; -}; +#define __STATVFS64_BODY \ + unsigned long f_bsize; \ + unsigned long f_frsize; \ + fsblkcnt_t f_blocks; \ + fsblkcnt_t f_bfree; \ + fsblkcnt_t f_bavail; \ + fsfilcnt_t f_files; \ + fsfilcnt_t f_ffree; \ + fsfilcnt_t f_favail; \ + unsigned long f_fsid; \ + unsigned long f_flag; \ + unsigned long f_namemax; \ + +struct statvfs { __STATVFS64_BODY }; +struct statvfs64 { __STATVFS64_BODY }; #define ST_RDONLY 0x0001 #define ST_NOSUID 0x0002 @@ -48,7 +50,9 @@ struct statvfs { #define ST_RELATIME 0x1000 extern int statvfs(const char* __restrict, struct statvfs* __restrict) __nonnull((1, 2)); +extern int statvfs64(const char* __restrict, struct statvfs64* __restrict) __nonnull((1, 2)); extern int fstatvfs(int, struct statvfs*) __nonnull((2)); +extern int fstatvfs64(int, struct statvfs64*) __nonnull((2)); __END_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/times.h b/9/platforms/android-19/arch-mips64/usr/include/sys/times.h index 1b9b8b2..6ce5b55 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/times.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/times.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_TIMES_H_ #define _SYS_TIMES_H_ @@ -34,7 +35,7 @@ __BEGIN_DECLS -extern clock_t times(struct tms *); +extern clock_t times(struct tms*); __END_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/types.h b/9/platforms/android-19/arch-mips64/usr/include/sys/types.h index f8ae813..dc847d2 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/types.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/types.h @@ -35,28 +35,48 @@ #include <linux/types.h> #include <linux/posix_types.h> -/* __kernel_gid_t and __kernel_uid_t are 16 bit for legacy reasons. - * Android uses __kernel_uid32_t and __kernel_gid32_t instead. - */ -typedef __kernel_gid32_t gid_t; -typedef __kernel_uid32_t uid_t; +/* gids, uids, and pids are all 32-bit. */ +typedef __kernel_gid32_t __gid_t; +typedef __gid_t gid_t; +typedef __kernel_uid32_t __uid_t; +typedef __uid_t uid_t; +typedef __kernel_pid_t __pid_t; +typedef __pid_t pid_t; +typedef uint32_t __id_t; +typedef __id_t id_t; typedef unsigned long blkcnt_t; typedef unsigned long blksize_t; typedef __kernel_caddr_t caddr_t; typedef __kernel_clock_t clock_t; -typedef __kernel_clockid_t clockid_t; + +typedef __kernel_clockid_t __clockid_t; +typedef __clockid_t clockid_t; + typedef __kernel_daddr_t daddr_t; typedef unsigned long fsblkcnt_t; typedef unsigned long fsfilcnt_t; -typedef __kernel_ino_t ino_t; -typedef __kernel_key_t key_t; -typedef __kernel_mode_t mode_t; + +typedef __kernel_mode_t __mode_t; +typedef __mode_t mode_t; + +typedef __kernel_key_t __key_t; +typedef __key_t key_t; + +typedef uint32_t __ino_t; +typedef __ino_t ino_t; + +typedef uint32_t __nlink_t; typedef __nlink_t nlink_t; -typedef __kernel_pid_t pid_t; -typedef __kernel_suseconds_t suseconds_t; -typedef __kernel_timer_t timer_t; -typedef unsigned int useconds_t; + +typedef void* __timer_t; +typedef __timer_t timer_t; + +typedef int32_t __suseconds_t; +typedef __suseconds_t suseconds_t; + +typedef uint32_t __useconds_t; +typedef __useconds_t useconds_t; #if !defined(__LP64__) /* This historical accident means that we had a 32-bit dev_t on 32-bit architectures. */ @@ -66,7 +86,8 @@ typedef uint64_t dev_t; #endif /* This historical accident means that we had a 32-bit time_t on 32-bit architectures. */ -typedef __kernel_time_t time_t; +typedef __kernel_time_t __time_t; +typedef __time_t time_t; /* This historical accident means that we had a 32-bit off_t on 32-bit architectures. */ #ifndef _OFF_T_DEFINED_ @@ -76,9 +97,6 @@ typedef __kernel_off_t off_t; typedef __kernel_loff_t loff_t; typedef loff_t off64_t; -/* This one really is meant to be just 32 bits! */ -typedef uint32_t id_t; - /* while POSIX wants these in <sys/types.h>, we * declare then in <pthread.h> instead */ #if 0 @@ -93,6 +111,17 @@ typedef .... pthread_rwlock_attr_t; typedef .... pthread_t; #endif +#if !defined(__LP64__) +/* This historical accident means that we had a signed socklen_t on 32-bit architectures. */ +typedef int32_t __socklen_t; +#else +/* LP64 still has a 32-bit socklen_t. */ +typedef uint32_t __socklen_t; +#endif +typedef __socklen_t socklen_t; + +typedef __builtin_va_list __va_list; + #ifndef _SSIZE_T_DEFINED_ #define _SSIZE_T_DEFINED_ /* Traditionally, bionic's ssize_t was "long int". This caused GCC to emit warnings when you diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/un.h b/9/platforms/android-19/arch-mips64/usr/include/sys/un.h index f89ead3..65ffbdc 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/un.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/un.h @@ -28,8 +28,7 @@ #ifndef _SYS_UN_H_ #define _SYS_UN_H_ -#include <sys/_types.h> -typedef __sa_family_t sa_family_t; +typedef unsigned short sa_family_t; #include <linux/un.h> diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/user.h b/9/platforms/android-19/arch-mips64/usr/include/sys/user.h index 90cce80..e16b1a5 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/user.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/user.h @@ -30,6 +30,7 @@ #define _SYS_USER_H_ #include <sys/cdefs.h> +#include <limits.h> /* For PAGE_SIZE. */ __BEGIN_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/sys/vfs.h b/9/platforms/android-19/arch-mips64/usr/include/sys/vfs.h index fd2655c..cd6044d 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/sys/vfs.h +++ b/9/platforms/android-19/arch-mips64/usr/include/sys/vfs.h @@ -38,76 +38,74 @@ __BEGIN_DECLS typedef struct { int __val[2]; } __fsid_t; typedef __fsid_t fsid_t; -#if defined(__LP64__) -#if defined(__mips__) -/* 64-bit MIPS */ -struct statfs { - uint64_t f_type; - uint64_t f_bsize; - uint64_t f_frsize; /* Fragment size - unsupported */ - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_bavail; - fsid_t f_fsid; - uint64_t f_namelen; - uint64_t f_flags; - uint64_t f_spare[5]; -}; -#else -struct statfs { - uint64_t f_type; - uint64_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - fsid_t f_fsid; - uint64_t f_namelen; - uint64_t f_frsize; - uint64_t f_flags; - uint64_t f_spare[4]; -}; -#endif +#if defined(__aarch64__) || defined(__x86_64__) +#define __STATFS64_BODY \ + uint64_t f_type; \ + uint64_t f_bsize; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_bavail; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + fsid_t f_fsid; \ + uint64_t f_namelen; \ + uint64_t f_frsize; \ + uint64_t f_flags; \ + uint64_t f_spare[4]; \ + +#elif defined(__mips__) && defined(__LP64__) +/* 64-bit MIPS. */ +#define __STATFS64_BODY \ + uint64_t f_type; \ + uint64_t f_bsize; \ + uint64_t f_frsize; /* Fragment size - unsupported. */ \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + uint64_t f_bavail; \ + fsid_t f_fsid; \ + uint64_t f_namelen; \ + uint64_t f_flags; \ + uint64_t f_spare[5]; \ + #elif defined(__mips__) /* 32-bit MIPS (corresponds to the kernel's statfs64 type). */ -struct statfs { - uint32_t f_type; - uint32_t f_bsize; - uint32_t f_frsize; - uint32_t __pad; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_bavail; - fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_flags; - uint32_t f_spare[5]; -}; +#define __STATFS64_BODY \ + uint32_t f_type; \ + uint32_t f_bsize; \ + uint32_t f_frsize; \ + uint32_t __pad; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + uint64_t f_bavail; \ + fsid_t f_fsid; \ + uint32_t f_namelen; \ + uint32_t f_flags; \ + uint32_t f_spare[5]; \ + #else /* 32-bit ARM or x86 (corresponds to the kernel's statfs64 type). */ -struct statfs { - uint32_t f_type; - uint32_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_frsize; - uint32_t f_flags; - uint32_t f_spare[4]; -}; +#define __STATFS64_BODY \ + uint32_t f_type; \ + uint32_t f_bsize; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_bavail; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + fsid_t f_fsid; \ + uint32_t f_namelen; \ + uint32_t f_frsize; \ + uint32_t f_flags; \ + uint32_t f_spare[4]; \ + #endif -/* Source compatibility with glibc. */ -#define statfs64 statfs +struct statfs { __STATFS64_BODY }; +struct statfs64 { __STATFS64_BODY }; /* Declare that we have the f_namelen, f_frsize, and f_flags fields. */ #define _STATFS_F_NAMELEN @@ -160,7 +158,9 @@ struct statfs { #define _XIAFS_SUPER_MAGIC 0x012FD16D extern int statfs(const char*, struct statfs*) __nonnull((1, 2)); +extern int statfs64(const char*, struct statfs64*) __nonnull((1, 2)); extern int fstatfs(int, struct statfs*) __nonnull((2)); +extern int fstatfs64(int, struct statfs64*) __nonnull((2)); __END_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/termios.h b/9/platforms/android-19/arch-mips64/usr/include/termios.h index 0d44355..b9685ca 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/termios.h +++ b/9/platforms/android-19/arch-mips64/usr/include/termios.h @@ -31,87 +31,23 @@ #include <sys/cdefs.h> #include <sys/ioctl.h> #include <sys/types.h> -#include <stdint.h> #include <linux/termios.h> __BEGIN_DECLS -/* Redefine these to match their ioctl number */ -#undef TCSANOW -#define TCSANOW TCSETS - -#undef TCSADRAIN -#define TCSADRAIN TCSETSW - -#undef TCSAFLUSH -#define TCSAFLUSH TCSETSF - -static __inline__ int tcgetattr(int fd, struct termios *s) -{ - return ioctl(fd, TCGETS, s); -} - -static __inline__ int tcsetattr(int fd, int __opt, const struct termios *s) -{ - return ioctl(fd, __opt, (void *)s); -} - -static __inline__ int tcflow(int fd, int action) -{ - return ioctl(fd, TCXONC, (void *)(intptr_t)action); -} - -static __inline__ int tcflush(int fd, int __queue) -{ - return ioctl(fd, TCFLSH, (void *)(intptr_t)__queue); -} - -static __inline__ int tcdrain(int fd) -{ - return ioctl(fd, TCSBRK, (void *)(intptr_t)1); -} - -static __inline__ pid_t tcgetsid(int fd) -{ - pid_t _pid; - return ioctl(fd, TIOCGSID, &_pid) ? (pid_t)-1 : _pid; -} - -static __inline__ int tcsendbreak(int fd, int __duration) -{ - return ioctl(fd, TCSBRKP, (void *)(uintptr_t)__duration); -} - -static __inline__ speed_t cfgetospeed(const struct termios *s) -{ - return (speed_t)(s->c_cflag & CBAUD); -} - -static __inline__ int cfsetospeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static __inline__ speed_t cfgetispeed(const struct termios *s) -{ - return (speed_t)(s->c_cflag & CBAUD); -} - -static __inline__ int cfsetispeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static __inline__ void cfmakeraw(struct termios *s) -{ - s->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); - s->c_oflag &= ~OPOST; - s->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); - s->c_cflag &= ~(CSIZE|PARENB); - s->c_cflag |= CS8; -} +speed_t cfgetispeed(const struct termios*); +speed_t cfgetospeed(const struct termios*); +void cfmakeraw(struct termios*); +int cfsetispeed(struct termios*, speed_t); +int cfsetospeed(struct termios*, speed_t); +int cfsetspeed(struct termios*, speed_t); +int tcdrain(int); +int tcflow(int, int); +int tcflush(int, int); +int tcgetattr(int, struct termios*); +pid_t tcgetsid(int); +int tcsendbreak(int, int); +int tcsetattr(int, int, const struct termios*); __END_DECLS diff --git a/9/platforms/android-19/arch-mips64/usr/include/unistd.h b/9/platforms/android-19/arch-mips64/usr/include/unistd.h index 29758f5..d21f23d 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/unistd.h +++ b/9/platforms/android-19/arch-mips64/usr/include/unistd.h @@ -64,6 +64,7 @@ extern pid_t setsid(void); extern int execv(const char *, char * const *); extern int execvp(const char *, char * const *); +extern int execvpe(const char *, char * const *, char * const *); extern int execve(const char *, char * const *, char * const *); extern int execl(const char *, const char *, ...); extern int execlp(const char *, const char *, ...); @@ -185,14 +186,15 @@ extern int sysconf(int name); extern int daemon(int, int); -/* A special syscall that is only available on the ARM, not x86 function. */ -extern int cacheflush(long start, long end, long flags); +#if defined(__arm__) || (defined(__mips__) && !defined(__LP64__)) +extern int cacheflush(long, long, long); + /* __attribute__((deprecated("use __builtin___clear_cache instead"))); */ +#endif extern pid_t tcgetpgrp(int fd); extern int tcsetpgrp(int fd, pid_t _pid); #if 0 /* MISSING FROM BIONIC */ -extern int execvpe(const char *, char * const *, char * const *); extern int execlpe(const char *, const char *, ...); extern int getfsuid(uid_t); extern int setfsuid(uid_t); diff --git a/9/platforms/android-19/arch-mips64/usr/include/wchar.h b/9/platforms/android-19/arch-mips64/usr/include/wchar.h index 76ac02c..32cf127 100644 --- a/9/platforms/android-19/arch-mips64/usr/include/wchar.h +++ b/9/platforms/android-19/arch-mips64/usr/include/wchar.h @@ -147,6 +147,9 @@ extern wchar_t *wmemset(wchar_t *, wchar_t, size_t); extern int wprintf(const wchar_t *, ...); extern int wscanf(const wchar_t *, ...); +extern size_t wcslcat(wchar_t*, const wchar_t*, size_t); +extern size_t wcslcpy(wchar_t*, const wchar_t*, size_t); + /* No really supported. These are just for making libstdc++-v3 happy. */ typedef void *wctrans_t; extern wint_t towctrans(wint_t, wctrans_t); diff --git a/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_dynamic.o b/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_dynamic.o Binary files differindex afa719e..9beaa1e 100644 --- a/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_dynamic.o +++ b/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_dynamic.o diff --git a/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_so.o b/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_so.o Binary files differindex 835d79c..db3db62 100644 --- a/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_so.o +++ b/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_so.o diff --git a/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_static.o b/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_static.o Binary files differindex afa719e..9beaa1e 100644 --- a/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_static.o +++ b/9/platforms/android-19/arch-mips64/usr/lib/crtbegin_static.o diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libEGL.so b/9/platforms/android-19/arch-mips64/usr/lib/libEGL.so Binary files differindex 53a07f1..a1ffbbf 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libEGL.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libEGL.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libGLESv1_CM.so b/9/platforms/android-19/arch-mips64/usr/lib/libGLESv1_CM.so Binary files differindex 0a1a076..b8e74ea 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libGLESv1_CM.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libGLESv1_CM.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libGLESv2.so b/9/platforms/android-19/arch-mips64/usr/lib/libGLESv2.so Binary files differindex 35ec8eb..f103a9b 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libGLESv2.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libGLESv2.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libGLESv3.so b/9/platforms/android-19/arch-mips64/usr/lib/libGLESv3.so Binary files differindex a489209..6d42d1f 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libGLESv3.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libGLESv3.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libOpenMAXAL.so b/9/platforms/android-19/arch-mips64/usr/lib/libOpenMAXAL.so Binary files differindex 68557fb..cdbba28 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libOpenMAXAL.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libOpenMAXAL.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libOpenSLES.so b/9/platforms/android-19/arch-mips64/usr/lib/libOpenSLES.so Binary files differindex 973d78a..40c8385 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libOpenSLES.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libOpenSLES.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libandroid.so b/9/platforms/android-19/arch-mips64/usr/lib/libandroid.so Binary files differindex 738bbf7..c9cb847 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libandroid.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libandroid.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libc.a b/9/platforms/android-19/arch-mips64/usr/lib/libc.a Binary files differindex b6f3627..d42fbc3 100644 --- a/9/platforms/android-19/arch-mips64/usr/lib/libc.a +++ b/9/platforms/android-19/arch-mips64/usr/lib/libc.a diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libc.so b/9/platforms/android-19/arch-mips64/usr/lib/libc.so Binary files differindex be0cb00..2af203e 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libc.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libc.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libdl.so b/9/platforms/android-19/arch-mips64/usr/lib/libdl.so Binary files differindex 1d75a3a..0e1e57a 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libdl.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libdl.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libjnigraphics.so b/9/platforms/android-19/arch-mips64/usr/lib/libjnigraphics.so Binary files differindex fa09f2b..4b3e12b 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libjnigraphics.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libjnigraphics.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/liblog.so b/9/platforms/android-19/arch-mips64/usr/lib/liblog.so Binary files differindex cf0184c..1328de5 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/liblog.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/liblog.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libm.a b/9/platforms/android-19/arch-mips64/usr/lib/libm.a Binary files differindex cc37c18..8aef92a 100644 --- a/9/platforms/android-19/arch-mips64/usr/lib/libm.a +++ b/9/platforms/android-19/arch-mips64/usr/lib/libm.a diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libm.so b/9/platforms/android-19/arch-mips64/usr/lib/libm.so Binary files differindex 5dccb3c..3cd578b 100755 --- a/9/platforms/android-19/arch-mips64/usr/lib/libm.so +++ b/9/platforms/android-19/arch-mips64/usr/lib/libm.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libstdc++.a b/9/platforms/android-19/arch-mips64/usr/lib/libstdc++.a Binary files differindex 92c3eb6..1816bf5 100644 --- a/9/platforms/android-19/arch-mips64/usr/lib/libstdc++.a +++ b/9/platforms/android-19/arch-mips64/usr/lib/libstdc++.a diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libstdc++.so b/9/platforms/android-19/arch-mips64/usr/lib/libstdc++.so Binary files differnew file mode 100755 index 0000000..802e808 --- /dev/null +++ b/9/platforms/android-19/arch-mips64/usr/lib/libstdc++.so diff --git a/9/platforms/android-19/arch-mips64/usr/lib/libz.a b/9/platforms/android-19/arch-mips64/usr/lib/libz.a Binary files differindex 10cd881..bc977d6 100644 --- a/9/platforms/android-19/arch-mips64/usr/lib/libz.a +++ b/9/platforms/android-19/arch-mips64/usr/lib/libz.a diff --git a/9/platforms/android-19/arch-x86_64/usr/include/arpa/nameser.h b/9/platforms/android-19/arch-x86_64/usr/include/arpa/nameser.h index 028eadc..a87ac91 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/arpa/nameser.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/arpa/nameser.h @@ -1,41 +1,668 @@ +/* $NetBSD: nameser.h,v 1.25 2009/04/12 17:07:34 christos Exp $ */ + +/* + * Portions Copyright (C) 2004, 2005, 2008, 2009 Internet Systems Consortium, Inc. ("ISC") + * Portions Copyright (C) 1996-2003 Internet Software Consortium. + * + * Permission to use, copy, modify, and/or distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + /* - * Copyright (C) 2008 The Android Open Source Project - * All rights reserved. + * Copyright (c) 1983, 1989, 1993 + * The Regents of the University of California. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: - * * Redistributions of source code must retain the above copyright + * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, - * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, - * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS - * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT - * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ -#ifndef _arpa_nameser_h -#define _arpa_nameser_h + +/* + * Id: nameser.h,v 1.16 2009/03/03 01:52:48 each Exp + */ + +#ifndef _ARPA_NAMESER_H_ +#define _ARPA_NAMESER_H_ + +#define BIND_4_COMPAT #include <sys/types.h> #include <sys/cdefs.h> -/* this header intentionally blank - * - * the definitions normally found in <arpa/nameser.h> are - * really a bunch of resolver's internal declarations that - * should not be exposed to client code in any way +/* + * Revision information. This is the release date in YYYYMMDD format. + * It can change every day so the right thing to do with it is use it + * in preprocessor commands such as "#if (__NAMESER > 19931104)". Do not + * compare for equality; rather, use it to determine whether your libbind.a + * contains a new enough lib/nameser/ to support the feature you need. + */ + +#define __NAMESER 20090302 /*%< New interface version stamp. */ + +/* + * Define constants based on RFC0883, RFC1034, RFC 1035 + */ +#define NS_PACKETSZ 512 /* default UDP packet size */ +#define NS_MAXDNAME 1025 /* maximum domain name (presentation format)*/ +#define NS_MAXMSG 65535 /* maximum message size */ +#define NS_MAXCDNAME 255 /* maximum compressed domain name */ +#define NS_MAXLABEL 63 /* maximum length of domain label */ +#define NS_MAXLABELS 128 /* theoretical max #/labels per domain name */ +#define NS_MAXNNAME 256 /* maximum uncompressed (binary) domain name*/ +#define NS_MAXPADDR (sizeof "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff") +#define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */ +#define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */ +#define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */ +#define NS_INT32SZ 4 /* #/bytes of data in a uint32_t */ +#define NS_INT16SZ 2 /* #/bytes of data in a uint16_t */ +#define NS_INT8SZ 1 /* #/bytes of data in a uint8_t */ +#define NS_INADDRSZ 4 /* IPv4 T_A */ +#define NS_IN6ADDRSZ 16 /* IPv6 T_AAAA */ +#define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */ +#define NS_DEFAULTPORT 53 /* For both TCP and UDP. */ + +/* + * These can be expanded with synonyms, just keep ns_parse.c:ns_parserecord() + * in synch with it. + */ +typedef enum __ns_sect { + ns_s_qd = 0, /* Query: Question. */ + ns_s_zn = 0, /* Update: Zone. */ + ns_s_an = 1, /* Query: Answer. */ + ns_s_pr = 1, /* Update: Prerequisites. */ + ns_s_ns = 2, /* Query: Name servers. */ + ns_s_ud = 2, /* Update: Update. */ + ns_s_ar = 3, /* Query|Update: Additional records. */ + ns_s_max = 4 +} ns_sect; + +/* + * Network name (compressed or not) type. Equivilent to a pointer when used + * in a function prototype. Can be const'd. + */ +typedef u_char ns_nname[NS_MAXNNAME]; +typedef const u_char *ns_nname_ct; +typedef u_char *ns_nname_t; + +struct ns_namemap { ns_nname_ct base; int len; }; +typedef struct ns_namemap *ns_namemap_t; +typedef const struct ns_namemap *ns_namemap_ct; + +/* + * This is a message handle. It is caller allocated and has no dynamic data. + * This structure is intended to be opaque to all but ns_parse.c, thus the + * leading _'s on the member names. Use the accessor functions, not the _'s. + */ +typedef struct __ns_msg { + const u_char *_msg, *_eom; + uint16_t _id, _flags, _counts[ns_s_max]; + const u_char *_sections[ns_s_max]; + ns_sect _sect; + int _rrnum; + const u_char *_msg_ptr; +} ns_msg; +/* + * This is a newmsg handle, used when constructing new messages with + * ns_newmsg_init, et al. + */ +struct ns_newmsg { + ns_msg msg; + const u_char *dnptrs[25]; + const u_char **lastdnptr; +}; +typedef struct ns_newmsg ns_newmsg; + +/* Private data structure - do not use from outside library. */ +struct _ns_flagdata { int mask, shift; }; +extern const struct _ns_flagdata _ns_flagdata[]; + +/* Accessor macros - this is part of the public interface. */ + +#define ns_msg_id(handle) ((handle)._id + 0) +#define ns_msg_base(handle) ((handle)._msg + 0) +#define ns_msg_end(handle) ((handle)._eom + 0) +#define ns_msg_size(handle) ((size_t)((handle)._eom - (handle)._msg)) +#define ns_msg_count(handle, section) ((handle)._counts[section] + 0) + +/* + * This is a parsed record. It is caller allocated and has no dynamic data. + */ +typedef struct __ns_rr { + char name[NS_MAXDNAME]; + uint16_t type; + uint16_t rr_class; + uint32_t ttl; + uint16_t rdlength; + const u_char * rdata; +} ns_rr; + +/* + * Same thing, but using uncompressed network binary names, and real C types. + */ +typedef struct __ns_rr2 { + ns_nname nname; + size_t nnamel; + int type; + int rr_class; + u_int ttl; + int rdlength; + const u_char * rdata; +} ns_rr2; +/* Accessor macros - this is part of the public interface. */ +#define ns_rr_name(rr) (((rr).name[0] != '\0') ? (rr).name : ".") +#define ns_rr_nname(rr) ((const ns_nname_t)(rr).nname) +#define ns_rr_nnamel(rr) ((rr).nnamel + 0) +#define ns_rr_type(rr) ((ns_type)((rr).type + 0)) +#define ns_rr_class(rr) ((ns_class)((rr).rr_class + 0)) +#define ns_rr_ttl(rr) ((u_long)(rr).ttl + 0) +#define ns_rr_rdlen(rr) ((size_t)(rr).rdlength + 0) +#define ns_rr_rdata(rr) ((rr).rdata + 0) + +/* + * These don't have to be in the same order as in the packet flags word, + * and they can even overlap in some cases, but they will need to be kept + * in synch with ns_parse.c:ns_flagdata[]. + */ +typedef enum __ns_flag { + ns_f_qr, /* Question/Response. */ + ns_f_opcode, /* Operation code. */ + ns_f_aa, /* Authoritative Answer. */ + ns_f_tc, /* Truncation occurred. */ + ns_f_rd, /* Recursion Desired. */ + ns_f_ra, /* Recursion Available. */ + ns_f_z, /* MBZ. */ + ns_f_ad, /* Authentic Data (DNSSEC). */ + ns_f_cd, /* Checking Disabled (DNSSEC). */ + ns_f_rcode, /* Response code. */ + ns_f_max +} ns_flag; + +/* + * Currently defined opcodes. */ +typedef enum __ns_opcode { + ns_o_query = 0, /* Standard query. */ + ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */ + ns_o_status = 2, /* Name server status query (unsupported). */ + /* Opcode 3 is undefined/reserved. */ + ns_o_notify = 4, /* Zone change notification. */ + ns_o_update = 5, /* Zone update message. */ + ns_o_max = 6 +} ns_opcode; + +/* + * Currently defined response codes. + */ +typedef enum __ns_rcode { + ns_r_noerror = 0, /* No error occurred. */ + ns_r_formerr = 1, /* Format error. */ + ns_r_servfail = 2, /* Server failure. */ + ns_r_nxdomain = 3, /* Name error. */ + ns_r_notimpl = 4, /* Unimplemented. */ + ns_r_refused = 5, /* Operation refused. */ + /* these are for BIND_UPDATE */ + ns_r_yxdomain = 6, /* Name exists */ + ns_r_yxrrset = 7, /* RRset exists */ + ns_r_nxrrset = 8, /* RRset does not exist */ + ns_r_notauth = 9, /* Not authoritative for zone */ + ns_r_notzone = 10, /* Zone of record different from zone section */ + ns_r_max = 11, + /* The following are EDNS extended rcodes */ + ns_r_badvers = 16, + /* The following are TSIG errors */ + ns_r_badsig = 16, + ns_r_badkey = 17, + ns_r_badtime = 18 +} ns_rcode; + +/* BIND_UPDATE */ +typedef enum __ns_update_operation { + ns_uop_delete = 0, + ns_uop_add = 1, + ns_uop_max = 2 +} ns_update_operation; + +/* + * This structure is used for TSIG authenticated messages + */ +struct ns_tsig_key { + char name[NS_MAXDNAME], alg[NS_MAXDNAME]; + unsigned char *data; + int len; +}; +typedef struct ns_tsig_key ns_tsig_key; + +/* + * This structure is used for TSIG authenticated TCP messages + */ +struct ns_tcp_tsig_state { + int counter; + struct dst_key *key; + void *ctx; + unsigned char sig[NS_PACKETSZ]; + int siglen; +}; +typedef struct ns_tcp_tsig_state ns_tcp_tsig_state; + +#define NS_TSIG_FUDGE 300 +#define NS_TSIG_TCP_COUNT 100 +#define NS_TSIG_ALG_HMAC_MD5 "HMAC-MD5.SIG-ALG.REG.INT" + +#define NS_TSIG_ERROR_NO_TSIG -10 +#define NS_TSIG_ERROR_NO_SPACE -11 +#define NS_TSIG_ERROR_FORMERR -12 + +/* + * Currently defined type values for resources and queries. + */ +typedef enum __ns_type { + ns_t_invalid = 0, /* Cookie. */ + ns_t_a = 1, /* Host address. */ + ns_t_ns = 2, /* Authoritative server. */ + ns_t_md = 3, /* Mail destination. */ + ns_t_mf = 4, /* Mail forwarder. */ + ns_t_cname = 5, /* Canonical name. */ + ns_t_soa = 6, /* Start of authority zone. */ + ns_t_mb = 7, /* Mailbox domain name. */ + ns_t_mg = 8, /* Mail group member. */ + ns_t_mr = 9, /* Mail rename name. */ + ns_t_null = 10, /* Null resource record. */ + ns_t_wks = 11, /* Well known service. */ + ns_t_ptr = 12, /* Domain name pointer. */ + ns_t_hinfo = 13, /* Host information. */ + ns_t_minfo = 14, /* Mailbox information. */ + ns_t_mx = 15, /* Mail routing information. */ + ns_t_txt = 16, /* Text strings. */ + ns_t_rp = 17, /* Responsible person. */ + ns_t_afsdb = 18, /* AFS cell database. */ + ns_t_x25 = 19, /* X_25 calling address. */ + ns_t_isdn = 20, /* ISDN calling address. */ + ns_t_rt = 21, /* Router. */ + ns_t_nsap = 22, /* NSAP address. */ + ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */ + ns_t_sig = 24, /* Security signature. */ + ns_t_key = 25, /* Security key. */ + ns_t_px = 26, /* X.400 mail mapping. */ + ns_t_gpos = 27, /* Geographical position (withdrawn). */ + ns_t_aaaa = 28, /* IPv6 Address. */ + ns_t_loc = 29, /* Location Information. */ + ns_t_nxt = 30, /* Next domain (security). */ + ns_t_eid = 31, /* Endpoint identifier. */ + ns_t_nimloc = 32, /* Nimrod Locator. */ + ns_t_srv = 33, /* Server Selection. */ + ns_t_atma = 34, /* ATM Address */ + ns_t_naptr = 35, /* Naming Authority PoinTeR */ + ns_t_kx = 36, /* Key Exchange */ + ns_t_cert = 37, /* Certification record */ + ns_t_a6 = 38, /* IPv6 address (experimental) */ + ns_t_dname = 39, /* Non-terminal DNAME */ + ns_t_sink = 40, /* Kitchen sink (experimentatl) */ + ns_t_opt = 41, /* EDNS0 option (meta-RR) */ + ns_t_apl = 42, /* Address prefix list (RFC 3123) */ + ns_t_ds = 43, /* Delegation Signer */ + ns_t_sshfp = 44, /* SSH Fingerprint */ + ns_t_ipseckey = 45, /* IPSEC Key */ + ns_t_rrsig = 46, /* RRset Signature */ + ns_t_nsec = 47, /* Negative security */ + ns_t_dnskey = 48, /* DNS Key */ + ns_t_dhcid = 49, /* Dynamic host configuratin identifier */ + ns_t_nsec3 = 50, /* Negative security type 3 */ + ns_t_nsec3param = 51, /* Negative security type 3 parameters */ + ns_t_hip = 55, /* Host Identity Protocol */ + ns_t_spf = 99, /* Sender Policy Framework */ + ns_t_tkey = 249, /* Transaction key */ + ns_t_tsig = 250, /* Transaction signature. */ + ns_t_ixfr = 251, /* Incremental zone transfer. */ + ns_t_axfr = 252, /* Transfer zone of authority. */ + ns_t_mailb = 253, /* Transfer mailbox records. */ + ns_t_maila = 254, /* Transfer mail agent records. */ + ns_t_any = 255, /* Wildcard match. */ + ns_t_zxfr = 256, /* BIND-specific, nonstandard. */ + ns_t_dlv = 32769, /* DNSSEC look-aside validatation. */ + ns_t_max = 65536 +} ns_type; + +/* Exclusively a QTYPE? (not also an RTYPE) */ +#define ns_t_qt_p(t) (ns_t_xfr_p(t) || (t) == ns_t_any || \ + (t) == ns_t_mailb || (t) == ns_t_maila) +/* Some kind of meta-RR? (not a QTYPE, but also not an RTYPE) */ +#define ns_t_mrr_p(t) ((t) == ns_t_tsig || (t) == ns_t_opt) +/* Exclusively an RTYPE? (not also a QTYPE or a meta-RR) */ +#define ns_t_rr_p(t) (!ns_t_qt_p(t) && !ns_t_mrr_p(t)) +#define ns_t_udp_p(t) ((t) != ns_t_axfr && (t) != ns_t_zxfr) +#define ns_t_xfr_p(t) ((t) == ns_t_axfr || (t) == ns_t_ixfr || \ + (t) == ns_t_zxfr) + +/* + * Values for class field + */ +typedef enum __ns_class { + ns_c_invalid = 0, /* Cookie. */ + ns_c_in = 1, /* Internet. */ + ns_c_2 = 2, /* unallocated/unsupported. */ + ns_c_chaos = 3, /* MIT Chaos-net. */ + ns_c_hs = 4, /* MIT Hesiod. */ + /* Query class values which do not appear in resource records */ + ns_c_none = 254, /* for prereq. sections in update requests */ + ns_c_any = 255, /* Wildcard match. */ + ns_c_max = 65536 +} ns_class; + +/* DNSSEC constants. */ + +typedef enum __ns_key_types { + ns_kt_rsa = 1, /* key type RSA/MD5 */ + ns_kt_dh = 2, /* Diffie Hellman */ + ns_kt_dsa = 3, /* Digital Signature Standard (MANDATORY) */ + ns_kt_private = 254 /* Private key type starts with OID */ +} ns_key_types; + +typedef enum __ns_cert_types { + cert_t_pkix = 1, /* PKIX (X.509v3) */ + cert_t_spki = 2, /* SPKI */ + cert_t_pgp = 3, /* PGP */ + cert_t_url = 253, /* URL private type */ + cert_t_oid = 254 /* OID private type */ +} ns_cert_types; + +/* Flags field of the KEY RR rdata. */ +#define NS_KEY_TYPEMASK 0xC000 /* Mask for "type" bits */ +#define NS_KEY_TYPE_AUTH_CONF 0x0000 /* Key usable for both */ +#define NS_KEY_TYPE_CONF_ONLY 0x8000 /* Key usable for confidentiality */ +#define NS_KEY_TYPE_AUTH_ONLY 0x4000 /* Key usable for authentication */ +#define NS_KEY_TYPE_NO_KEY 0xC000 /* No key usable for either; no key */ +/* The type bits can also be interpreted independently, as single bits: */ +#define NS_KEY_NO_AUTH 0x8000 /* Key unusable for authentication */ +#define NS_KEY_NO_CONF 0x4000 /* Key unusable for confidentiality */ +#define NS_KEY_RESERVED2 0x2000 /* Security is *mandatory* if bit=0 */ +#define NS_KEY_EXTENDED_FLAGS 0x1000 /* reserved - must be zero */ +#define NS_KEY_RESERVED4 0x0800 /* reserved - must be zero */ +#define NS_KEY_RESERVED5 0x0400 /* reserved - must be zero */ +#define NS_KEY_NAME_TYPE 0x0300 /* these bits determine the type */ +#define NS_KEY_NAME_USER 0x0000 /* key is assoc. with user */ +#define NS_KEY_NAME_ENTITY 0x0200 /* key is assoc. with entity eg host */ +#define NS_KEY_NAME_ZONE 0x0100 /* key is zone key */ +#define NS_KEY_NAME_RESERVED 0x0300 /* reserved meaning */ +#define NS_KEY_RESERVED8 0x0080 /* reserved - must be zero */ +#define NS_KEY_RESERVED9 0x0040 /* reserved - must be zero */ +#define NS_KEY_RESERVED10 0x0020 /* reserved - must be zero */ +#define NS_KEY_RESERVED11 0x0010 /* reserved - must be zero */ +#define NS_KEY_SIGNATORYMASK 0x000F /* key can sign RR's of same name */ +#define NS_KEY_RESERVED_BITMASK ( NS_KEY_RESERVED2 | \ + NS_KEY_RESERVED4 | \ + NS_KEY_RESERVED5 | \ + NS_KEY_RESERVED8 | \ + NS_KEY_RESERVED9 | \ + NS_KEY_RESERVED10 | \ + NS_KEY_RESERVED11 ) +#define NS_KEY_RESERVED_BITMASK2 0xFFFF /* no bits defined here */ + +/* The Algorithm field of the KEY and SIG RR's is an integer, {1..254} */ +#define NS_ALG_MD5RSA 1 /* MD5 with RSA */ +#define NS_ALG_DH 2 /* Diffie Hellman KEY */ +#define NS_ALG_DSA 3 /* DSA KEY */ +#define NS_ALG_DSS NS_ALG_DSA +#define NS_ALG_EXPIRE_ONLY 253 /* No alg, no security */ +#define NS_ALG_PRIVATE_OID 254 /* Key begins with OID giving alg */ + +/* Protocol values */ +/* value 0 is reserved */ +#define NS_KEY_PROT_TLS 1 +#define NS_KEY_PROT_EMAIL 2 +#define NS_KEY_PROT_DNSSEC 3 +#define NS_KEY_PROT_IPSEC 4 +#define NS_KEY_PROT_ANY 255 + +/* Signatures */ +#define NS_MD5RSA_MIN_BITS 512 /* Size of a mod or exp in bits */ +#define NS_MD5RSA_MAX_BITS 4096 + /* Total of binary mod and exp */ +#define NS_MD5RSA_MAX_BYTES ((NS_MD5RSA_MAX_BITS+7/8)*2+3) + /* Max length of text sig block */ +#define NS_MD5RSA_MAX_BASE64 (((NS_MD5RSA_MAX_BYTES+2)/3)*4) +#define NS_MD5RSA_MIN_SIZE ((NS_MD5RSA_MIN_BITS+7)/8) +#define NS_MD5RSA_MAX_SIZE ((NS_MD5RSA_MAX_BITS+7)/8) + +#define NS_DSA_SIG_SIZE 41 +#define NS_DSA_MIN_SIZE 213 +#define NS_DSA_MAX_BYTES 405 + +/* Offsets into SIG record rdata to find various values */ +#define NS_SIG_TYPE 0 /* Type flags */ +#define NS_SIG_ALG 2 /* Algorithm */ +#define NS_SIG_LABELS 3 /* How many labels in name */ +#define NS_SIG_OTTL 4 /* Original TTL */ +#define NS_SIG_EXPIR 8 /* Expiration time */ +#define NS_SIG_SIGNED 12 /* Signature time */ +#define NS_SIG_FOOT 16 /* Key footprint */ +#define NS_SIG_SIGNER 18 /* Domain name of who signed it */ + +/* How RR types are represented as bit-flags in NXT records */ +#define NS_NXT_BITS 8 +#define NS_NXT_BIT_SET( n,p) (p[(n)/NS_NXT_BITS] |= (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_CLEAR(n,p) (p[(n)/NS_NXT_BITS] &= ~(0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_BIT_ISSET(n,p) (p[(n)/NS_NXT_BITS] & (0x80>>((n)%NS_NXT_BITS))) +#define NS_NXT_MAX 127 + +/* + * EDNS0 extended flags and option codes, host order. + */ +#define NS_OPT_DNSSEC_OK 0x8000U +#define NS_OPT_NSID 3 + +/* + * Inline versions of get/put short/long. Pointer is advanced. + */ +#define NS_GET16(s, cp) do { \ + const u_char *t_cp = (const u_char *)(cp); \ + (s) = ((uint16_t)t_cp[0] << 8) \ + | ((uint16_t)t_cp[1]) \ + ; \ + (cp) += NS_INT16SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_GET32(l, cp) do { \ + const u_char *t_cp = (const u_char *)(cp); \ + (l) = ((uint32_t)t_cp[0] << 24) \ + | ((uint32_t)t_cp[1] << 16) \ + | ((uint32_t)t_cp[2] << 8) \ + | ((uint32_t)t_cp[3]) \ + ; \ + (cp) += NS_INT32SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_PUT16(s, cp) do { \ + uint32_t t_s = (uint32_t)(s); \ + u_char *t_cp = (u_char *)(cp); \ + *t_cp++ = t_s >> 8; \ + *t_cp = t_s; \ + (cp) += NS_INT16SZ; \ +} while (/*CONSTCOND*/0) + +#define NS_PUT32(l, cp) do { \ + uint32_t t_l = (uint32_t)(l); \ + u_char *t_cp = (u_char *)(cp); \ + *t_cp++ = t_l >> 24; \ + *t_cp++ = t_l >> 16; \ + *t_cp++ = t_l >> 8; \ + *t_cp = t_l; \ + (cp) += NS_INT32SZ; \ +} while (/*CONSTCOND*/0) + +/* + * ANSI C identifier hiding for bind's lib/nameser. + */ +#define ns_msg_getflag __ns_msg_getflag +#define ns_get16 __ns_get16 +#define ns_get32 __ns_get32 +#define ns_put16 __ns_put16 +#define ns_put32 __ns_put32 +#define ns_initparse __ns_initparse +#define ns_skiprr __ns_skiprr +#define ns_parserr __ns_parserr +#define ns_parserr2 __ns_parserr2 +#define ns_sprintrr __ns_sprintrr +#define ns_sprintrrf __ns_sprintrrf +#define ns_format_ttl __ns_format_ttl +#define ns_parse_ttl __ns_parse_ttl +#define ns_datetosecs __ns_datetosecs +#define ns_name_ntol __ns_name_ntol +#define ns_name_ntop __ns_name_ntop +#define ns_name_pton __ns_name_pton +#define ns_name_pton2 __ns_name_pton2 +#define ns_name_unpack __ns_name_unpack +#define ns_name_unpack2 __ns_name_unpack2 +#define ns_name_pack __ns_name_pack +#define ns_name_compress __ns_name_compress +#define ns_name_uncompress __ns_name_uncompress +#define ns_name_skip __ns_name_skip +#define ns_name_rollback __ns_name_rollback +#define ns_name_length __ns_name_length +#define ns_name_eq __ns_name_eq +#define ns_name_owned __ns_name_owned +#define ns_name_map __ns_name_map +#define ns_name_labels __ns_name_labels +#define ns_sign __ns_sign +#define ns_sign2 __ns_sign2 +#define ns_sign_tcp __ns_sign_tcp +#define ns_sign_tcp2 __ns_sign_tcp2 +#define ns_sign_tcp_init __ns_sign_tcp_init +#define ns_find_tsig __ns_find_tsig +#define ns_verify __ns_verify +#define ns_verify_tcp __ns_verify_tcp +#define ns_verify_tcp_init __ns_verify_tcp_init +#define ns_samedomain __ns_samedomain +#define ns_subdomain __ns_subdomain +#define ns_makecanon __ns_makecanon +#define ns_samename __ns_samename +#define ns_newmsg_init __ns_newmsg_init +#define ns_newmsg_copy __ns_newmsg_copy +#define ns_newmsg_id __ns_newmsg_id +#define ns_newmsg_flag __ns_newmsg_flag +#define ns_newmsg_q __ns_newmsg_q +#define ns_newmsg_rr __ns_newmsg_rr +#define ns_newmsg_done __ns_newmsg_done +#define ns_rdata_unpack __ns_rdata_unpack +#define ns_rdata_equal __ns_rdata_equal +#define ns_rdata_refers __ns_rdata_refers + +__BEGIN_DECLS +int ns_msg_getflag(ns_msg, int); +uint16_t ns_get16(const u_char *); +uint32_t ns_get32(const u_char *); +void ns_put16(uint16_t, u_char *); +void ns_put32(uint32_t, u_char *); +int ns_initparse(const u_char *, int, ns_msg *); +int ns_skiprr(const u_char *, const u_char *, ns_sect, int); +int ns_parserr(ns_msg *, ns_sect, int, ns_rr *); +int ns_parserr2(ns_msg *, ns_sect, int, ns_rr2 *); +int ns_sprintrr(const ns_msg *, const ns_rr *, + const char *, const char *, char *, size_t); +int ns_sprintrrf(const u_char *, size_t, const char *, + ns_class, ns_type, u_long, const u_char *, + size_t, const char *, const char *, + char *, size_t); +int ns_format_ttl(u_long, char *, size_t); +int ns_parse_ttl(const char *, u_long *); +uint32_t ns_datetosecs(const char *cp, int *errp); +int ns_name_ntol(const u_char *, u_char *, size_t); +int ns_name_ntop(const u_char *, char *, size_t); +int ns_name_pton(const char *, u_char *, size_t); +int ns_name_pton2(const char *, u_char *, size_t, size_t *); +int ns_name_unpack(const u_char *, const u_char *, + const u_char *, u_char *, size_t); +int ns_name_unpack2(const u_char *, const u_char *, + const u_char *, u_char *, size_t, + size_t *); +int ns_name_pack(const u_char *, u_char *, int, + const u_char **, const u_char **); +int ns_name_uncompress(const u_char *, const u_char *, + const u_char *, char *, size_t); +int ns_name_compress(const char *, u_char *, size_t, + const u_char **, const u_char **); +int ns_name_skip(const u_char **, const u_char *); +void ns_name_rollback(const u_char *, const u_char **, + const u_char **); +int ns_sign(u_char *, int *, int, int, void *, + const u_char *, int, u_char *, int *, time_t); +int ns_sign2(u_char *, int *, int, int, void *, + const u_char *, int, u_char *, int *, time_t, + u_char **, u_char **); +ssize_t ns_name_length(ns_nname_ct, size_t); +int ns_name_eq(ns_nname_ct, size_t, ns_nname_ct, size_t); +int ns_name_owned(ns_namemap_ct, int, ns_namemap_ct, int); +int ns_name_map(ns_nname_ct, size_t, ns_namemap_t, int); +int ns_name_labels(ns_nname_ct, size_t); +int ns_sign_tcp(u_char *, int *, int, int, + ns_tcp_tsig_state *, int); +int ns_sign_tcp2(u_char *, int *, int, int, + ns_tcp_tsig_state *, int, + u_char **, u_char **); +int ns_sign_tcp_init(void *, const u_char *, int, + ns_tcp_tsig_state *); +u_char *ns_find_tsig(u_char *, u_char *); +int ns_verify(u_char *, int *, void *, + const u_char *, int, u_char *, int *, + time_t *, int); +int ns_verify_tcp(u_char *, int *, ns_tcp_tsig_state *, int); +int ns_verify_tcp_init(void *, const u_char *, int, + ns_tcp_tsig_state *); +int ns_samedomain(const char *, const char *); +int ns_subdomain(const char *, const char *); +int ns_makecanon(const char *, char *, size_t); +int ns_samename(const char *, const char *); +int ns_newmsg_init(u_char *buffer, size_t bufsiz, ns_newmsg *); +int ns_newmsg_copy(ns_newmsg *, ns_msg *); +void ns_newmsg_id(ns_newmsg *handle, uint16_t id); +void ns_newmsg_flag(ns_newmsg *handle, ns_flag flag, u_int value); +int ns_newmsg_q(ns_newmsg *handle, ns_nname_ct qname, + ns_type qtype, ns_class qclass); +int ns_newmsg_rr(ns_newmsg *handle, ns_sect sect, + ns_nname_ct name, ns_type type, + ns_class rr_class, uint32_t ttl, + uint16_t rdlen, const u_char *rdata); +size_t ns_newmsg_done(ns_newmsg *handle); +ssize_t ns_rdata_unpack(const u_char *, const u_char *, ns_type, + const u_char *, size_t, u_char *, size_t); +int ns_rdata_equal(ns_type, + const u_char *, size_t, + const u_char *, size_t); +int ns_rdata_refers(ns_type, + const u_char *, size_t, + const u_char *); +__END_DECLS + +#ifdef BIND_4_COMPAT +#include <arpa/nameser_compat.h> +#endif -#endif /* _arpa_nameser_h */ +#endif /* !_ARPA_NAMESER_H_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/arpa/nameser_compat.h b/9/platforms/android-19/arch-x86_64/usr/include/arpa/nameser_compat.h new file mode 100644 index 0000000..e060f60 --- /dev/null +++ b/9/platforms/android-19/arch-x86_64/usr/include/arpa/nameser_compat.h @@ -0,0 +1,238 @@ +/* $NetBSD: nameser_compat.h,v 1.1.1.2 2004/11/07 01:28:27 christos Exp $ */ + +/* Copyright (c) 1983, 1989 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * from nameser.h 8.1 (Berkeley) 6/2/93 + * Id: nameser_compat.h,v 1.8 2006/05/19 02:33:40 marka Exp + */ + +#ifndef _ARPA_NAMESER_COMPAT_ +#define _ARPA_NAMESER_COMPAT_ + +#define __BIND 19950621 /* (DEAD) interface version stamp. */ + +#include <endian.h> + +#ifndef BYTE_ORDER +#if (BSD >= 199103) +# include <machine/endian.h> +#else +#ifdef __linux__ +# include <endian.h> +#else +#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax, pc) */ +#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */ +#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp)*/ + +#if defined(vax) || defined(ns32000) || defined(sun386) || defined(i386) || \ + defined(MIPSEL) || defined(_MIPSEL) || defined(BIT_ZERO_ON_RIGHT) || \ + defined(__i386__) || defined(__i386) || defined(__amd64__) || \ + defined(__x86_64__) || defined(MIPSEL) || defined(_MIPSEL) || \ + defined(BIT_ZERO_ON_RIGHT) || defined(__alpha__) || defined(__alpha) || \ + (defined(__Lynx__) && defined(__x86__)) +#define BYTE_ORDER LITTLE_ENDIAN +#endif + +#if defined(sel) || defined(pyr) || defined(mc68000) || defined(sparc) || \ + defined(is68k) || defined(tahoe) || defined(ibm032) || defined(ibm370) || \ + defined(MIPSEB) || defined(_MIPSEB) || defined(_IBMR2) || defined(DGUX) ||\ + defined(apollo) || defined(__convex__) || defined(_CRAY) || \ + defined(__hppa) || defined(__hp9000) || \ + defined(__hp9000s300) || defined(__hp9000s700) || \ + defined(__hp3000s900) || defined(__hpux) || defined(MPE) || \ + defined (BIT_ZERO_ON_LEFT) || defined(m68k) || defined(__sparc) || \ + (defined(__Lynx__) && \ + (defined(__68k__) || defined(__sparc__) || defined(__powerpc__))) +#define BYTE_ORDER BIG_ENDIAN +#endif +#endif /* __linux */ +#endif /* BSD */ +#endif /* BYTE_ORDER */ + +#if !defined(BYTE_ORDER) || \ + (BYTE_ORDER != BIG_ENDIAN && BYTE_ORDER != LITTLE_ENDIAN && \ + BYTE_ORDER != PDP_ENDIAN) + /* you must determine what the correct bit order is for + * your compiler - the next line is an intentional error + * which will force your compiles to bomb until you fix + * the above macros. + */ + #error "Undefined or invalid BYTE_ORDER"; +#endif + +/* + * Structure for query header. The order of the fields is machine- and + * compiler-dependent, depending on the byte/bit order and the layout + * of bit fields. We use bit fields only in int variables, as this + * is all ANSI requires. This requires a somewhat confusing rearrangement. + */ + +typedef struct { + unsigned id :16; /* query identification number */ +#if BYTE_ORDER == BIG_ENDIAN + /* fields in third byte */ + unsigned qr: 1; /* response flag */ + unsigned opcode: 4; /* purpose of message */ + unsigned aa: 1; /* authoritive answer */ + unsigned tc: 1; /* truncated message */ + unsigned rd: 1; /* recursion desired */ + /* fields in fourth byte */ + unsigned ra: 1; /* recursion available */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ad: 1; /* authentic data from named */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned rcode :4; /* response code */ +#endif +#if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN + /* fields in third byte */ + unsigned rd :1; /* recursion desired */ + unsigned tc :1; /* truncated message */ + unsigned aa :1; /* authoritive answer */ + unsigned opcode :4; /* purpose of message */ + unsigned qr :1; /* response flag */ + /* fields in fourth byte */ + unsigned rcode :4; /* response code */ + unsigned cd: 1; /* checking disabled by resolver */ + unsigned ad: 1; /* authentic data from named */ + unsigned unused :1; /* unused bits (MBZ as of 4.9.3a3) */ + unsigned ra :1; /* recursion available */ +#endif + /* remaining bytes */ + unsigned qdcount :16; /* number of question entries */ + unsigned ancount :16; /* number of answer entries */ + unsigned nscount :16; /* number of authority entries */ + unsigned arcount :16; /* number of resource entries */ +} HEADER; + +#define PACKETSZ NS_PACKETSZ +#define MAXDNAME NS_MAXDNAME +#define MAXCDNAME NS_MAXCDNAME +#define MAXLABEL NS_MAXLABEL +#define HFIXEDSZ NS_HFIXEDSZ +#define QFIXEDSZ NS_QFIXEDSZ +#define RRFIXEDSZ NS_RRFIXEDSZ +#define INT32SZ NS_INT32SZ +#define INT16SZ NS_INT16SZ +#define INT8SZ NS_INT8SZ +#define INADDRSZ NS_INADDRSZ +#define IN6ADDRSZ NS_IN6ADDRSZ +#define INDIR_MASK NS_CMPRSFLGS +#define NAMESERVER_PORT NS_DEFAULTPORT + +#define S_ZONE ns_s_zn +#define S_PREREQ ns_s_pr +#define S_UPDATE ns_s_ud +#define S_ADDT ns_s_ar + +#define QUERY ns_o_query +#define IQUERY ns_o_iquery +#define STATUS ns_o_status +#define NS_NOTIFY_OP ns_o_notify +#define NS_UPDATE_OP ns_o_update + +#define NOERROR ns_r_noerror +#define FORMERR ns_r_formerr +#define SERVFAIL ns_r_servfail +#define NXDOMAIN ns_r_nxdomain +#define NOTIMP ns_r_notimpl +#define REFUSED ns_r_refused +#define YXDOMAIN ns_r_yxdomain +#define YXRRSET ns_r_yxrrset +#define NXRRSET ns_r_nxrrset +#define NOTAUTH ns_r_notauth +#define NOTZONE ns_r_notzone +/*#define BADSIG ns_r_badsig*/ +/*#define BADKEY ns_r_badkey*/ +/*#define BADTIME ns_r_badtime*/ + + +#define DELETE ns_uop_delete +#define ADD ns_uop_add + +#define T_A ns_t_a +#define T_NS ns_t_ns +#define T_MD ns_t_md +#define T_MF ns_t_mf +#define T_CNAME ns_t_cname +#define T_SOA ns_t_soa +#define T_MB ns_t_mb +#define T_MG ns_t_mg +#define T_MR ns_t_mr +#define T_NULL ns_t_null +#define T_WKS ns_t_wks +#define T_PTR ns_t_ptr +#define T_HINFO ns_t_hinfo +#define T_MINFO ns_t_minfo +#define T_MX ns_t_mx +#define T_TXT ns_t_txt +#define T_RP ns_t_rp +#define T_AFSDB ns_t_afsdb +#define T_X25 ns_t_x25 +#define T_ISDN ns_t_isdn +#define T_RT ns_t_rt +#define T_NSAP ns_t_nsap +#define T_NSAP_PTR ns_t_nsap_ptr +#define T_SIG ns_t_sig +#define T_KEY ns_t_key +#define T_PX ns_t_px +#define T_GPOS ns_t_gpos +#define T_AAAA ns_t_aaaa +#define T_LOC ns_t_loc +#define T_NXT ns_t_nxt +#define T_EID ns_t_eid +#define T_NIMLOC ns_t_nimloc +#define T_SRV ns_t_srv +#define T_ATMA ns_t_atma +#define T_NAPTR ns_t_naptr +#define T_A6 ns_t_a6 +#define T_TSIG ns_t_tsig +#define T_IXFR ns_t_ixfr +#define T_AXFR ns_t_axfr +#define T_MAILB ns_t_mailb +#define T_MAILA ns_t_maila +#define T_ANY ns_t_any + +#define C_IN ns_c_in +#define C_CHAOS ns_c_chaos +#define C_HS ns_c_hs +/* BIND_UPDATE */ +#define C_NONE ns_c_none +#define C_ANY ns_c_any + +#define GETSHORT NS_GET16 +#define GETLONG NS_GET32 +#define PUTSHORT NS_PUT16 +#define PUTLONG NS_PUT32 + +#endif /* _ARPA_NAMESER_COMPAT_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/asm-generic/signal.h b/9/platforms/android-19/arch-x86_64/usr/include/asm-generic/signal.h index c4c7e00..fe7d9a0 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/asm-generic/signal.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/asm-generic/signal.h @@ -19,10 +19,10 @@ #ifndef _UAPI__ASM_GENERIC_SIGNAL_H #define _UAPI__ASM_GENERIC_SIGNAL_H #include <linux/types.h> -#define _NSIG 64 +#define _KERNEL__NSIG 64 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define _NSIG_BPW __BITS_PER_LONG -#define _NSIG_WORDS (_NSIG / _NSIG_BPW) +#define _NSIG_WORDS (_KERNEL__NSIG / _NSIG_BPW) #define SIGHUP 1 #define SIGINT 2 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ @@ -68,7 +68,7 @@ /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define SIGRTMIN 32 #ifndef SIGRTMAX -#define SIGRTMAX _NSIG +#define SIGRTMAX _KERNEL__NSIG #endif /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define SA_NOCLDSTOP 0x00000001 diff --git a/9/platforms/android-19/arch-x86_64/usr/include/asm/signal.h b/9/platforms/android-19/arch-x86_64/usr/include/asm/signal.h index bba6bc7..6f5b435 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/asm/signal.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/asm/signal.h @@ -24,7 +24,7 @@ #include <linux/time.h> #include <linux/compiler.h> struct siginfo; -#define NSIG 32 +#define _KERNEL_NSIG 32 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ typedef unsigned long sigset_t; #endif @@ -72,7 +72,7 @@ typedef unsigned long sigset_t; #define SIGUNUSED 31 /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ #define SIGRTMIN 32 -#define SIGRTMAX _NSIG +#define SIGRTMAX _KERNEL__NSIG #define SA_NOCLDSTOP 0x00000001u #define SA_NOCLDWAIT 0x00000002u /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/asm/stat.h b/9/platforms/android-19/arch-x86_64/usr/include/asm/stat.h index 0998106..04c5569 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/asm/stat.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/asm/stat.h @@ -102,7 +102,7 @@ struct stat { long __linux_unused[3]; /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ }; -#define INIT_STRUCT_STAT_PADDING(st) do { st.__pad0 = 0; st.__unused[0] = 0; st.__unused[1] = 0; st.__unused[2] = 0; } while (0) +#define INIT_STRUCT_STAT_PADDING(st) do { st.__pad0 = 0; st.__linux_unused[0] = 0; st.__linux_unused[1] = 0; st.__linux_unused[2] = 0; } while (0) #endif struct __old_kernel_stat { /* WARNING: DO NOT EDIT, AUTO-GENERATED CODE - SEE TOP FOR INSTRUCTIONS */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/dirent.h b/9/platforms/android-19/arch-x86_64/usr/include/dirent.h index 129cdfa..bfe4ea4 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/dirent.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/dirent.h @@ -46,27 +46,33 @@ __BEGIN_DECLS #define DT_WHT 14 #endif -struct dirent { - uint64_t d_ino; - int64_t d_off; - unsigned short d_reclen; - unsigned char d_type; - char d_name[256]; -}; +#define __DIRENT64_BODY \ + uint64_t d_ino; \ + int64_t d_off; \ + unsigned short d_reclen; \ + unsigned char d_type; \ + char d_name[256]; \ + +struct dirent { __DIRENT64_BODY }; +struct dirent64 { __DIRENT64_BODY }; + #define d_fileno d_ino -#define dirent64 dirent typedef struct DIR DIR; extern DIR* opendir(const char*); extern DIR* fdopendir(int); extern struct dirent* readdir(DIR*); +extern struct dirent64* readdir64(DIR*); extern int readdir_r(DIR*, struct dirent*, struct dirent**); +extern int readdir64_r(DIR*, struct dirent64*, struct dirent64**); extern int closedir(DIR*); extern void rewinddir(DIR*); extern int dirfd(DIR*); extern int alphasort(const struct dirent**, const struct dirent**); +extern int alphasort64(const struct dirent64**, const struct dirent64**); extern int scandir(const char*, struct dirent***, int (*)(const struct dirent*), int (*)(const struct dirent**, const struct dirent**)); +extern int scandir64(const char*, struct dirent64***, int (*)(const struct dirent64*), int (*)(const struct dirent64**, const struct dirent64**)); extern int getdents(unsigned int, struct dirent*, unsigned int); __END_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/elf.h b/9/platforms/android-19/arch-x86_64/usr/include/elf.h index 3f2e4f2..7a217b0 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/elf.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/elf.h @@ -28,33 +28,58 @@ #ifndef _ELF_H #define _ELF_H -#include <stdint.h> #include <linux/auxvec.h> +#include <linux/elf.h> +#include <linux/elf-em.h> -/* TODO: can we switch to <linux/elf.h> instead? http://b/12476126. */ -#include <sys/exec_elf.h> +#include <machine/elf_machdep.h> typedef struct { - uint32_t a_type; + __u32 a_type; union { - uint32_t a_val; + __u32 a_val; } a_un; } Elf32_auxv_t; typedef struct { - uint64_t a_type; + __u64 a_type; union { - uint64_t a_val; + __u64 a_val; } a_un; } Elf64_auxv_t; -#ifdef __LP64__ -# define Elf_auxv_t Elf64_auxv_t -#else -# define Elf_auxv_t Elf32_auxv_t -#endif +#define DF_ORIGIN 0x00000001 +#define DF_SYMBOLIC 0x00000002 +#define DF_TEXTREL 0x00000004 +#define DF_BIND_NOW 0x00000008 +#define DF_STATIC_TLS 0x00000010 -/* <sys/exec_elf.h> doesn't contain any NT_ constants. aarch64 strace needs this one. */ -#define NT_PRSTATUS 1 +#define DT_BIND_NOW 24 +#define DT_INIT_ARRAY 25 +#define DT_FINI_ARRAY 26 +#define DT_INIT_ARRAYSZ 27 +#define DT_FINI_ARRAYSZ 28 +#define DT_RUNPATH 29 +#define DT_FLAGS 30 +/* glibc and BSD disagree for DT_ENCODING; glibc looks wrong. */ +#define DT_PREINIT_ARRAY 32 +#define DT_PREINIT_ARRAYSZ 33 + +#define ELFOSABI_SYSV 0 /* Synonym for ELFOSABI_NONE used by valgrind. */ + +#define EM_ARM 40 +#define EM_AARCH64 183 + +#define PT_GNU_RELRO 0x6474e552 + +#define STB_LOOS 10 +#define STB_HIOS 12 +#define STB_LOPROC 13 +#define STB_HIPROC 15 + +#define STT_LOOS 10 +#define STT_HIOS 12 +#define STT_LOPROC 13 +#define STT_HIPROC 15 #endif /* _ELF_H */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/fcntl.h b/9/platforms/android-19/arch-x86_64/usr/include/fcntl.h index b7b91f2..779a089 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/fcntl.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/fcntl.h @@ -41,12 +41,19 @@ __BEGIN_DECLS #define O_ASYNC FASYNC #endif +#define SYNC_FILE_RANGE_WAIT_BEFORE 1 +#define SYNC_FILE_RANGE_WRITE 2 +#define SYNC_FILE_RANGE_WAIT_AFTER 4 + extern int creat(const char*, mode_t); +extern int creat64(const char*, mode_t); extern int fallocate64(int, int, off64_t, off64_t); extern int fallocate(int, int, off_t, off_t); extern int fcntl(int, int, ...); extern int openat(int, const char*, int, ...); +extern int openat64(int, const char*, int, ...); extern int open(const char*, int, ...); +extern int open64(const char*, int, ...); extern int posix_fallocate64(int, off64_t, off64_t); extern int posix_fallocate(int, off_t, off_t); extern int unlinkat(int, const char*, int); diff --git a/9/platforms/android-19/arch-x86_64/usr/include/fenv.h b/9/platforms/android-19/arch-x86_64/usr/include/fenv.h index c0421c0..6966e0d 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/fenv.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/fenv.h @@ -1,5 +1,8 @@ -/*- - * Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG> +/* $OpenBSD: fenv.h,v 1.2 2011/05/25 21:46:49 martynas Exp $ */ +/* $NetBSD: fenv.h,v 1.2.4.1 2011/02/08 16:18:55 bouyer Exp $ */ + +/* + * Copyright (c) 2010 The NetBSD Foundation, Inc. * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -11,91 +14,56 @@ * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * $FreeBSD: src/lib/msun/i387/fenv.h,v 1.4 2005/03/17 22:21:46 das Exp $ + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. */ -#ifndef _FENV_H_ -#define _FENV_H_ +#ifndef _FENV_H_ +#define _FENV_H_ -#include <sys/types.h> +#include <sys/cdefs.h> +#include <machine/fenv.h> __BEGIN_DECLS -/* - * To preserve binary compatibility with FreeBSD 5.3, we pack the - * mxcsr into some reserved fields, rather than changing sizeof(fenv_t). - */ -typedef struct { - __uint16_t __control; - __uint16_t __mxcsr_hi; - __uint16_t __status; - __uint16_t __mxcsr_lo; - __uint32_t __tag; - char __other[16]; -} fenv_t; - -typedef __uint16_t fexcept_t; - -/* Exception flags */ -#define FE_INVALID 0x01 -#define FE_DENORMAL 0x02 -#define FE_DIVBYZERO 0x04 -#define FE_OVERFLOW 0x08 -#define FE_UNDERFLOW 0x10 -#define FE_INEXACT 0x20 -#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_DENORMAL | FE_INEXACT | \ - FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW) +int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int feraiseexcept(int); +int fesetexceptflag(const fexcept_t *, int); +int fetestexcept(int); -/* Rounding modes */ -#define FE_TONEAREST 0x0000 -#define FE_DOWNWARD 0x0400 -#define FE_UPWARD 0x0800 -#define FE_TOWARDZERO 0x0c00 -#define _ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | \ - FE_UPWARD | FE_TOWARDZERO) - -/* Default floating-point environment */ -extern const fenv_t __fe_dfl_env; -#define FE_DFL_ENV (&__fe_dfl_env) - -/* C99 floating-point exception functions */ -int feclearexcept(int excepts); -int fegetexceptflag(fexcept_t *flagp, int excepts); -int fesetexceptflag(const fexcept_t *flagp, int excepts); -/* feraiseexcept does not set the inexact flag on overflow/underflow */ -int feraiseexcept(int excepts); -int fetestexcept(int excepts); - -/* C99 rounding control functions */ int fegetround(void); -int fesetround(int round); +int fesetround(int); -/* C99 floating-point environment functions */ -int fegetenv(fenv_t *__envp); -int feholdexcept(fenv_t *__envp); -int fesetenv(const fenv_t *envp); -int feupdateenv(const fenv_t *__envp); +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); -#if __BSD_VISIBLE -/* Additional support functions to set/query floating point traps */ -int feenableexcept(int __mask); -int fedisableexcept(int __mask); +int feenableexcept(int); +int fedisableexcept(int); int fegetexcept(void); -#endif /* __BSD_VISIBLE */ +/* + * The following constant represents the default floating-point environment + * (that is, the one installed at program startup) and has type pointer to + * const-qualified fenv_t. + * + * It can be used as an argument to the functions that manage the floating-point + * environment, namely fesetenv() and feupdateenv(). + */ +extern const fenv_t __fe_dfl_env; +#define FE_DFL_ENV (&__fe_dfl_env) __END_DECLS -#endif /* !_FENV_H_ */ +#endif /* ! _FENV_H_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/ftw.h b/9/platforms/android-19/arch-x86_64/usr/include/ftw.h index 3bebea3..af524d0 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/ftw.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/ftw.h @@ -57,6 +57,9 @@ __BEGIN_DECLS int ftw(const char *, int (*)(const char *, const struct stat *, int), int); int nftw(const char *, int (*)(const char *, const struct stat *, int, struct FTW *), int, int); +int ftw64(const char *, int (*)(const char *, const struct stat64 *, int), int); +int nftw64(const char *, int (*)(const char *, const struct stat64 *, int, + struct FTW *), int, int); __END_DECLS #endif /* !_FTW_H */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/limits.h b/9/platforms/android-19/arch-x86_64/usr/include/limits.h index b9d4354..471d380 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/limits.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/limits.h @@ -105,9 +105,15 @@ #define ULONG_LONG_MAX ULLONG_MAX #endif +/* New code should use sysconf(_SC_PAGE_SIZE) instead. */ +#ifndef PAGE_SIZE +#define PAGE_SIZE 4096 +#endif #ifndef PAGESIZE -#include <asm/page.h> #define PAGESIZE PAGE_SIZE #endif +/* glibc's PAGE_MASK is the bitwise negation of BSD's! TODO: remove? */ +#define PAGE_MASK (~(PAGE_SIZE - 1)) + #endif /* !_LIMITS_H_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/link.h b/9/platforms/android-19/arch-x86_64/usr/include/link.h index 341fbf1..cb8e139 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/link.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/link.h @@ -33,7 +33,11 @@ __BEGIN_DECLS -#define ElfW(type) Elf_##type +#if __LP64__ +#define ElfW(type) Elf64_ ## type +#else +#define ElfW(type) Elf32_ ## type +#endif struct dl_phdr_info { ElfW(Addr) dlpi_addr; @@ -42,13 +46,35 @@ struct dl_phdr_info { ElfW(Half) dlpi_phnum; }; -int dl_iterate_phdr(int (*cb)(struct dl_phdr_info*, size_t, void*), void*); +int dl_iterate_phdr(int (*)(struct dl_phdr_info*, size_t, void*), void*); #ifdef __arm__ typedef long unsigned int* _Unwind_Ptr; -_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr pc, int* pcount); +_Unwind_Ptr dl_unwind_find_exidx(_Unwind_Ptr, int*); #endif +/* Used by the dynamic linker to communicate with the debugger. */ +struct link_map { + ElfW(Addr) l_addr; + char* l_name; + ElfW(Dyn)* l_ld; + struct link_map* l_next; + struct link_map* l_prev; +}; + +/* Used by the dynamic linker to communicate with the debugger. */ +struct r_debug { + int32_t r_version; + struct link_map* r_map; + ElfW(Addr) r_brk; + enum { + RT_CONSISTENT, + RT_ADD, + RT_DELETE + } r_state; + ElfW(Addr) r_ldbase; +}; + __END_DECLS #endif /* _LINK_H_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/locale.h b/9/platforms/android-19/arch-x86_64/usr/include/locale.h index 65b5c7d..b6dbfdb 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/locale.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/locale.h @@ -49,11 +49,13 @@ enum { LC_IDENTIFICATION = 12 }; -extern char *setlocale(int category, const char *locale); +extern char* setlocale(int, const char*); -/* Make libstdc++-v3 happy. */ +#if !defined(__LP64__) +// TODO: LP32 had these bogus declarations but LP64 should have a real struct lconv and localeconv(3). struct lconv { }; -struct lconv *localeconv(void); +struct lconv* localeconv(void); +#endif __END_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/machine/asm.h b/9/platforms/android-19/arch-x86_64/usr/include/machine/asm.h index 310b230..0af6dae 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/machine/asm.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/machine/asm.h @@ -37,8 +37,6 @@ #ifndef _AMD64_ASM_H_ #define _AMD64_ASM_H_ -#ifdef __x86_64__ - #ifdef __PIC__ #define PIC_PLT(x) x@PLT #define PIC_GOT(x) x@GOTPCREL(%rip) @@ -47,19 +45,6 @@ #define PIC_GOT(x) x #endif -# define _C_LABEL(x) x -#define _ASM_LABEL(x) x - -#define CVAROFF(x,y) (_C_LABEL(x)+y)(%rip) - -#ifdef __STDC__ -# define __CONCAT(x,y) x ## y -# define __STRING(x) #x -#else -# define __CONCAT(x,y) x/**/y -# define __STRING(x) "x" -#endif - /* let kernels and others override entrypoint alignment */ #ifndef _ALIGN_TEXT # ifdef _STANDALONE @@ -69,78 +54,4 @@ # endif #endif -#define _ENTRY(x) \ - .text; _ALIGN_TEXT; .globl x; .type x,@function; x: .cfi_startproc; -#define _LABEL(x) \ - .globl x; x: - -#ifdef _KERNEL -/* XXX Can't use __CONCAT() here, as it would be evaluated incorrectly. */ -#ifdef __STDC__ -#define IDTVEC(name) \ - ALIGN_TEXT; .globl X ## name; .type X ## name,@function; X ## name: -#define IDTVEC_END(name) \ - .size X ## name, . - X ## name -#else -#define IDTVEC(name) \ - ALIGN_TEXT; .globl X/**/name; .type X/**/name,@function; X/**/name: -#define IDTVEC_END(name) \ - .size X/**/name, . - X/**/name -#endif /* __STDC__ */ -#endif /* _KERNEL */ - -#ifdef __STDC__ -#define CPUVAR(off) %gs:CPU_INFO_ ## off -#else -#define CPUVAR(off) %gs:CPU_INFO_/**/off -#endif - - -#ifdef GPROF -# define _PROF_PROLOGUE \ - pushq %rbp; leaq (%rsp),%rbp; call PIC_PLT(__mcount); popq %rbp -#else -# define _PROF_PROLOGUE -#endif - -#define ENTRY(y) _ENTRY(_C_LABEL(y)); _PROF_PROLOGUE -#define NENTRY(y) _ENTRY(_C_LABEL(y)) -#define ALTENTRY(x) NENTRY(x) -#define ASENTRY(y) _ENTRY(_ASM_LABEL(y)); _PROF_PROLOGUE -#define LABEL(y) _LABEL(_C_LABEL(y)) -#define END(y) .cfi_endproc; .size y, . - y - -#define ASMSTR .asciz - -#define RCSID(x) .pushsection ".ident"; .asciz x; .popsection - -#define WEAK_ALIAS(alias,sym) \ - .weak alias; \ - alias = sym - -/* - * STRONG_ALIAS: create a strong alias. - */ -#define STRONG_ALIAS(alias,sym) \ - .globl alias; \ - alias = sym - -#ifdef __STDC__ -#define WARN_REFERENCES(sym,msg) \ - .pushsection .gnu.warning. ## sym; \ - .ascii msg; \ - .popsection -#else -#define WARN_REFERENCES(sym,msg) \ - .pushsection .gnu.warning./**/sym; \ - .ascii msg; \ - .popsection -#endif /* __STDC__ */ - -#else /* __x86_64__ */ - -#include <i386/asm.h> - -#endif /* __x86_64__ */ - #endif /* !_AMD64_ASM_H_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/machine/fenv.h b/9/platforms/android-19/arch-x86_64/usr/include/machine/fenv.h new file mode 100644 index 0000000..f3fabb6 --- /dev/null +++ b/9/platforms/android-19/arch-x86_64/usr/include/machine/fenv.h @@ -0,0 +1,71 @@ +/*- + * Copyright (c) 2004-2005 David Schultz <das@FreeBSD.ORG> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/lib/msun/i387/fenv.h,v 1.4 2005/03/17 22:21:46 das Exp $ + */ + +#ifndef _I387_FENV_H_ +#define _I387_FENV_H_ + +#include <sys/types.h> + +__BEGIN_DECLS + +/* + * To preserve binary compatibility with FreeBSD 5.3, we pack the + * mxcsr into some reserved fields, rather than changing sizeof(fenv_t). + */ +typedef struct { + __uint16_t __control; + __uint16_t __mxcsr_hi; + __uint16_t __status; + __uint16_t __mxcsr_lo; + __uint32_t __tag; + char __other[16]; +} fenv_t; + +typedef __uint16_t fexcept_t; + +/* Exception flags */ +#define FE_INVALID 0x01 +#define FE_DENORMAL 0x02 +#define FE_DIVBYZERO 0x04 +#define FE_OVERFLOW 0x08 +#define FE_UNDERFLOW 0x10 +#define FE_INEXACT 0x20 +#define FE_ALL_EXCEPT (FE_DIVBYZERO | FE_DENORMAL | FE_INEXACT | \ + FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW) + +/* Rounding modes */ +#define FE_TONEAREST 0x0000 +#define FE_DOWNWARD 0x0400 +#define FE_UPWARD 0x0800 +#define FE_TOWARDZERO 0x0c00 +#define _ROUND_MASK (FE_TONEAREST | FE_DOWNWARD | \ + FE_UPWARD | FE_TOWARDZERO) + +__END_DECLS + +#endif /* !I387_FENV_H_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/math.h b/9/platforms/android-19/arch-x86_64/usr/include/math.h index b13eca9..bd0241b 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/math.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/math.h @@ -18,7 +18,6 @@ #define _MATH_H_ #include <sys/cdefs.h> -#include <sys/_types.h> #include <limits.h> /* @@ -124,8 +123,10 @@ extern const union __nan_un { : (sizeof (x) == sizeof (double)) ? __signbit(x) \ : __signbitl(x)) -typedef __double_t double_t; -typedef __float_t float_t; +typedef double __double_t; +typedef __double_t double_t; +typedef float __float_t; +typedef __float_t float_t; #endif /* __ISO_C_VISIBLE >= 1999 */ /* diff --git a/9/platforms/android-19/arch-x86_64/usr/include/pthread.h b/9/platforms/android-19/arch-x86_64/usr/include/pthread.h index c5380be..f93f9e9 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/pthread.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/pthread.h @@ -127,11 +127,13 @@ int pthread_attr_setschedparam(pthread_attr_t*, const struct sched_param*) __non int pthread_attr_setschedpolicy(pthread_attr_t*, int) __nonnull((1)); int pthread_attr_setscope(pthread_attr_t*, int) __nonnull((1)); int pthread_attr_setstack(pthread_attr_t*, void*, size_t) __nonnull((1)); -int pthread_attr_setstacksize(pthread_attr_t * attr, size_t stack_size) __nonnull((1)); +int pthread_attr_setstacksize(pthread_attr_t*, size_t stack_size) __nonnull((1)); int pthread_condattr_destroy(pthread_condattr_t*) __nonnull((1)); +int pthread_condattr_getclock(const pthread_condattr_t*, clockid_t*) __nonnull((1, 2)); int pthread_condattr_getpshared(const pthread_condattr_t*, int*) __nonnull((1, 2)); int pthread_condattr_init(pthread_condattr_t*) __nonnull((1)); +int pthread_condattr_setclock(pthread_condattr_t*, clockid_t) __nonnull((1)); int pthread_condattr_setpshared(pthread_condattr_t*, int) __nonnull((1)); int pthread_cond_broadcast(pthread_cond_t*) __nonnull((1)); @@ -172,7 +174,7 @@ int pthread_mutexattr_settype(pthread_mutexattr_t*, int) __nonnull((1)); int pthread_mutex_destroy(pthread_mutex_t*) __nonnull((1)); int pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*) __nonnull((1)); int pthread_mutex_lock(pthread_mutex_t*) __nonnull((1)); -int pthread_mutex_timedlock(pthread_mutex_t*, struct timespec*) __nonnull((1, 2)); +int pthread_mutex_timedlock(pthread_mutex_t*, const struct timespec*) __nonnull((1, 2)); int pthread_mutex_trylock(pthread_mutex_t*) __nonnull((1)); int pthread_mutex_unlock(pthread_mutex_t*) __nonnull((1)); @@ -232,32 +234,17 @@ extern void __pthread_cleanup_pop(__pthread_cleanup_t*, int); #if !defined(__LP64__) -/* Deprecated by POSIX. TODO: support for LP64 but add deprecated attribute instead? */ -int pthread_attr_getstackaddr(const pthread_attr_t*, void**) __nonnull((1, 2)); /* deprecated */ -int pthread_attr_setstackaddr(pthread_attr_t*, void*) __nonnull((1)); /* deprecated */ - -/* Bionic additions that are deprecated even in the 32-bit ABI. */ +// Bionic additions that are deprecated even in the 32-bit ABI. +// +// TODO: Remove them once chromium_org / NFC have switched over. int pthread_cond_timedwait_monotonic_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); int pthread_cond_timedwait_monotonic(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); -#define HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC 1 - -/* - * Like pthread_cond_timedwait except 'reltime' is relative to the current time. - * TODO: not like glibc; include in LP64? - */ -int pthread_cond_timedwait_relative_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*); -#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE 1 -/* TODO: not like glibc; include in LP64? */ -int pthread_cond_timeout_np(pthread_cond_t*, pthread_mutex_t*, unsigned); +int pthread_cond_timedwait_relative_np(pthread_cond_t*, pthread_mutex_t*, const struct timespec*) /* TODO: __attribute__((deprecated("use pthread_cond_timedwait instead")))*/; +#define HAVE_PTHREAD_COND_TIMEDWAIT_RELATIVE 1 /* TODO: stop defining this to push LP32 off this API sooner. */ +int pthread_cond_timeout_np(pthread_cond_t*, pthread_mutex_t*, unsigned) /* TODO: __attribute__((deprecated("use pthread_cond_timedwait instead")))*/; -/* Like pthread_mutex_lock(), but will wait up to 'msecs' milli-seconds - * before returning. Same return values as pthread_mutex_trylock though, i.e. - * returns EBUSY if the lock could not be acquired after the timeout expired. - * - * TODO: replace with pthread_mutex_timedlock_np for LP64. - */ -int pthread_mutex_lock_timeout_np(pthread_mutex_t*, unsigned); +int pthread_mutex_lock_timeout_np(pthread_mutex_t*, unsigned) __attribute__((deprecated("use pthread_mutex_timedlock instead"))); #endif /* !defined(__LP64__) */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/search.h b/9/platforms/android-19/arch-x86_64/usr/include/search.h index e12e49e..1301a08 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/search.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/search.h @@ -10,7 +10,6 @@ #define _SEARCH_H_ #include <sys/cdefs.h> -#include <sys/_types.h> typedef enum { preorder, diff --git a/9/platforms/android-19/arch-x86_64/usr/include/signal.h b/9/platforms/android-19/arch-x86_64/usr/include/signal.h index 0159bf2..267f3e6 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/signal.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/signal.h @@ -51,20 +51,23 @@ __BEGIN_DECLS typedef int sig_atomic_t; -/* TODO: 64-bit: we should probably #undef the uapi NSIG and add a unit test that NSIG == _NSIG && NSIG >= 64. */ -#ifndef _NSIG -# define _NSIG 64 -#endif -#ifndef NSIG -# define NSIG _NSIG +/* The arm and x86 kernel header files don't define _NSIG. */ +#ifndef _KERNEL__NSIG +#define _KERNEL__NSIG 64 #endif +/* Userspace's NSIG is the kernel's _NSIG + 1. */ +#define _NSIG (_KERNEL__NSIG + 1) +#define NSIG _NSIG + extern const char* const sys_siglist[]; -extern const char* const sys_signame[]; +extern const char* const sys_signame[]; /* BSD compatibility. */ typedef __sighandler_t sig_t; /* BSD compatibility. */ typedef __sighandler_t sighandler_t; /* glibc compatibility. */ +#define si_timerid si_tid /* glibc compatibility. */ + #if defined(__LP64__) struct sigaction { diff --git a/9/platforms/android-19/arch-x86_64/usr/include/stdint.h b/9/platforms/android-19/arch-x86_64/usr/include/stdint.h index be49485..1f3d003 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/stdint.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/stdint.h @@ -30,7 +30,28 @@ #define _STDINT_H #include <stddef.h> -#include <sys/_types.h> + +typedef __signed char __int8_t; +typedef unsigned char __uint8_t; +typedef short __int16_t; +typedef unsigned short __uint16_t; +typedef int __int32_t; +typedef unsigned int __uint32_t; +#if __LP64__ +typedef long __int64_t; +typedef unsigned long __uint64_t; +#else +typedef long long __int64_t; +typedef unsigned long long __uint64_t; +#endif + +#if __LP64__ +typedef long __intptr_t; +typedef unsigned long __uintptr_t; +#else +typedef int __intptr_t; +typedef unsigned int __uintptr_t; +#endif typedef __int8_t int8_t; typedef __uint8_t uint8_t; @@ -44,40 +65,41 @@ typedef __uint32_t uint32_t; typedef __int64_t int64_t; typedef __uint64_t uint64_t; -typedef int8_t int_least8_t; -typedef int8_t int_fast8_t; +typedef __intptr_t intptr_t; +typedef __uintptr_t uintptr_t; +typedef int8_t int_least8_t; typedef uint8_t uint_least8_t; -typedef uint8_t uint_fast8_t; typedef int16_t int_least16_t; -typedef int32_t int_fast16_t; - typedef uint16_t uint_least16_t; -typedef uint32_t uint_fast16_t; typedef int32_t int_least32_t; -typedef int32_t int_fast32_t; - typedef uint32_t uint_least32_t; -typedef uint32_t uint_fast32_t; typedef int64_t int_least64_t; -typedef int64_t int_fast64_t; - typedef uint64_t uint_least64_t; + +typedef int8_t int_fast8_t; +typedef uint8_t uint_fast8_t; + +typedef int64_t int_fast64_t; typedef uint64_t uint_fast64_t; #ifdef __LP64__ -typedef long intptr_t; -typedef unsigned long uintptr_t; +typedef int64_t int_fast16_t; +typedef uint64_t uint_fast16_t; +typedef int64_t int_fast32_t; +typedef uint64_t uint_fast32_t; #else -typedef int intptr_t; -typedef unsigned int uintptr_t; +typedef int32_t int_fast16_t; +typedef uint32_t uint_fast16_t; +typedef int32_t int_fast32_t; +typedef uint32_t uint_fast32_t; #endif -typedef uint64_t uintmax_t; -typedef int64_t intmax_t; +typedef uint64_t uintmax_t; +typedef int64_t intmax_t; /* Keep the kernel from trying to define these types... */ #define __BIT_TYPES_DEFINED__ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/stdio.h b/9/platforms/android-19/arch-x86_64/usr/include/stdio.h index c241d94..7d30b38 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/stdio.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/stdio.h @@ -359,83 +359,6 @@ __END_DECLS #define fwopen(cookie, fn) funopen(cookie, 0, fn, 0, 0) #endif /* __BSD_VISIBLE */ -/* - * Functions internal to the implementation. - */ -__BEGIN_DECLS -int __srget(FILE *); -int __swbuf(int, FILE *); -__END_DECLS - -/* - * The __sfoo macros are here so that we can - * define function versions in the C library. - */ -#define __sgetc(p) (--(p)->_r < 0 ? __srget(p) : (int)(*(p)->_p++)) -#if defined(__GNUC__) -static __inline int __sputc(int _c, FILE *_p) { - if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) - return (*_p->_p++ = _c); - else - return (__swbuf(_c, _p)); -} -#else -/* - * This has been tuned to generate reasonable code on the vax using pcc. - */ -#define __sputc(c, p) \ - (--(p)->_w < 0 ? \ - (p)->_w >= (p)->_lbfsize ? \ - (*(p)->_p = (c)), *(p)->_p != '\n' ? \ - (int)*(p)->_p++ : \ - __swbuf('\n', p) : \ - __swbuf((int)(c), p) : \ - (*(p)->_p = (c), (int)*(p)->_p++)) -#endif - -#define __sfeof(p) (((p)->_flags & __SEOF) != 0) -#define __sferror(p) (((p)->_flags & __SERR) != 0) -#define __sclearerr(p) ((void)((p)->_flags &= ~(__SERR|__SEOF))) -#define __sfileno(p) ((p)->_file) - -extern int __isthreaded; - -#define feof(p) (!__isthreaded ? __sfeof(p) : (feof)(p)) -#define ferror(p) (!__isthreaded ? __sferror(p) : (ferror)(p)) -#define clearerr(p) (!__isthreaded ? __sclearerr(p) : (clearerr)(p)) - -#if __POSIX_VISIBLE -#define fileno(p) (!__isthreaded ? __sfileno(p) : (fileno)(p)) -#endif - -#define getc(fp) (!__isthreaded ? __sgetc(fp) : (getc)(fp)) - -#if __BSD_VISIBLE -/* - * The macro implementations of putc and putc_unlocked are not - * fully POSIX compliant; they do not set errno on failure - */ -#define putc(x, fp) (!__isthreaded ? __sputc(x, fp) : (putc)(x, fp)) -#endif /* __BSD_VISIBLE */ - -#ifndef lint -#if __POSIX_VISIBLE >= 199506 -#define getc_unlocked(fp) __sgetc(fp) -/* - * The macro implementations of putc and putc_unlocked are not - * fully POSIX compliant; they do not set errno on failure - */ -#if __BSD_VISIBLE -#define putc_unlocked(x, fp) __sputc(x, fp) -#endif /* __BSD_VISIBLE */ -#endif /* __POSIX_VISIBLE >= 199506 */ -#endif /* lint */ - -#define getchar() getc(stdin) -#define putchar(x) putc(x, stdout) -#define getchar_unlocked() getc_unlocked(stdin) -#define putchar_unlocked(c) putc_unlocked(c, stdout) - #ifdef _GNU_SOURCE /* * glibc defines dprintf(int, const char*, ...), which is poorly named @@ -470,8 +393,10 @@ int vsprintf(char *dest, const char *format, __va_list ap) } #if defined(__clang__) +#if !defined(WITH_SYNTAX_CHECK) #define __wrap_snprintf(dest, size, ...) __builtin___snprintf_chk(dest, size, 0, __bos(dest), __VA_ARGS__) #define snprintf(...) __wrap_snprintf(__VA_ARGS__) +#endif #else __BIONIC_FORTIFY_INLINE __printflike(3, 4) @@ -483,8 +408,10 @@ int snprintf(char *dest, size_t size, const char *format, ...) #endif #if defined(__clang__) +#if !defined(WITH_SYNTAX_CHECK) #define __wrap_sprintf(dest, ...) __builtin___sprintf_chk(dest, 0, __bos(dest), __VA_ARGS__) #define sprintf(...) __wrap_sprintf(__VA_ARGS__) +#endif #else __BIONIC_FORTIFY_INLINE __printflike(2, 3) diff --git a/9/platforms/android-19/arch-x86_64/usr/include/stdlib.h b/9/platforms/android-19/arch-x86_64/usr/include/stdlib.h index 72b554f..9b7e6d1 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/stdlib.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/stdlib.h @@ -54,28 +54,23 @@ extern int clearenv(void); extern char* mkdtemp(char*); extern char* mktemp(char*) __warnattr("mktemp possibly used unsafely; consider using mkstemp"); extern int mkstemp(char*); +extern int mkstemp64(char*); extern long strtol(const char *, char **, int); extern long long strtoll(const char *, char **, int); extern unsigned long strtoul(const char *, char **, int); extern unsigned long long strtoull(const char *, char **, int); -extern double strtod(const char *nptr, char **endptr); extern int posix_memalign(void **memptr, size_t alignment, size_t size); -static __inline__ float strtof(const char *nptr, char **endptr) -{ - return (float)strtod(nptr, endptr); -} - -extern int atoi(const char *) __purefunc; -extern long atol(const char *) __purefunc; -extern long long atoll(const char *) __purefunc; +extern double atof(const char*); +extern double strtod(const char*, char**); +extern float strtof(const char*, char**); +extern long double strtold(const char*, char**); -static __inline__ double atof(const char *nptr) -{ - return (strtod(nptr, NULL)); -} +extern int atoi(const char*) __purefunc; +extern long atol(const char*) __purefunc; +extern long long atoll(const char*) __purefunc; extern int abs(int) __pure2; extern long labs(long) __pure2; @@ -152,6 +147,10 @@ typedef struct { extern lldiv_t lldiv(long long, long long); +/* BSD compatibility. */ +extern const char* getprogname(void); +extern void setprogname(const char*); + #if 1 /* MISSING FROM BIONIC - ENABLED FOR STLPort and libstdc++-v3 */ /* make STLPort happy */ extern int mblen(const char *, size_t); diff --git a/9/platforms/android-19/arch-x86_64/usr/include/string.h b/9/platforms/android-19/arch-x86_64/usr/include/string.h index 37d22c4..f00e291 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/string.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/string.h @@ -42,13 +42,13 @@ extern void* memcpy(void* __restrict, const void* __restrict, size_t); extern void* memmove(void *, const void *, size_t); extern void* memset(void *, int, size_t); extern void* memmem(const void *, size_t, const void *, size_t) __purefunc; -extern void memswap(void *, void *, size_t); extern char* index(const char *, int) __purefunc; extern char* strchr(const char *, int) __purefunc; extern char* __strchr_chk(const char *, int, size_t); extern char* strrchr(const char *, int) __purefunc; +extern char* __strrchr_chk(const char *, int, size_t); extern size_t strlen(const char *) __purefunc; extern size_t __strlen_chk(const char *, size_t); @@ -244,6 +244,7 @@ size_t strlen(const char *s) { return __strlen_chk(s, bos); } +#if !defined(HAS_STRCHR) __BIONIC_FORTIFY_INLINE char* strchr(const char *s, int c) { size_t bos = __bos(s); @@ -262,8 +263,7 @@ char* strchr(const char *s, int c) { return __strchr_chk(s, c, bos); } - -extern char* __strrchr_chk(const char *, int, size_t); +#endif __BIONIC_FORTIFY_INLINE char* strrchr(const char *s, int c) { diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/_sigdefs.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/_sigdefs.h index eadf7b9..44d60d9 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/_sigdefs.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/_sigdefs.h @@ -35,67 +35,41 @@ #error __BIONIC_SIGDEF not defined #endif -__BIONIC_SIGDEF(HUP,1,"Hangup") -__BIONIC_SIGDEF(INT,2,"Interrupt") -__BIONIC_SIGDEF(QUIT,3,"Quit") -__BIONIC_SIGDEF(ILL,4,"Illegal instruction") -__BIONIC_SIGDEF(TRAP,5,"Trap") -__BIONIC_SIGDEF(ABRT,6,"Aborted") -#ifdef __mips__ -__BIONIC_SIGDEF(EMT,7,"EMT") -#else -__BIONIC_SIGDEF(BUS,7,"Bus error") +__BIONIC_SIGDEF(SIGHUP, "Hangup") +__BIONIC_SIGDEF(SIGINT, "Interrupt") +__BIONIC_SIGDEF(SIGQUIT, "Quit") +__BIONIC_SIGDEF(SIGILL, "Illegal instruction") +__BIONIC_SIGDEF(SIGTRAP, "Trap") +__BIONIC_SIGDEF(SIGABRT, "Aborted") +#ifdef SIGEMT +__BIONIC_SIGDEF(SIGEMT, "EMT") #endif -__BIONIC_SIGDEF(FPE,8,"Floating point exception") -__BIONIC_SIGDEF(KILL,9,"Killed") -#ifdef __mips__ -__BIONIC_SIGDEF(BUS,10,"Bus error") -#else -__BIONIC_SIGDEF(USR1,10,"User signal 1") -#endif -__BIONIC_SIGDEF(SEGV,11,"Segmentation fault") -#ifdef __mips__ -__BIONIC_SIGDEF(SYS,12,"Bad system call") -#else -__BIONIC_SIGDEF(USR2,12,"User signal 2") -#endif -__BIONIC_SIGDEF(PIPE,13,"Broken pipe") -__BIONIC_SIGDEF(ALRM,14,"Alarm clock") -__BIONIC_SIGDEF(TERM,15,"Terminated") -#ifdef __mips__ -__BIONIC_SIGDEF(USR1,16,"User signal 1") -__BIONIC_SIGDEF(USR2,17,"User signal 2") -__BIONIC_SIGDEF(CHLD,18,"Child exited") -__BIONIC_SIGDEF(PWR,19,"Power failure") -__BIONIC_SIGDEF(WINCH,20,"Window size changed") -__BIONIC_SIGDEF(URG,21,"Urgent I/O condition") -__BIONIC_SIGDEF(IO,22,"I/O possible") -__BIONIC_SIGDEF(STOP,23,"Stopped (signal)") -__BIONIC_SIGDEF(TSTP,24,"Stopped") -__BIONIC_SIGDEF(CONT,25,"Continue") -__BIONIC_SIGDEF(TTIN,26,"Stopped (tty input)") -__BIONIC_SIGDEF(TTOU,27,"Stopped (tty output)") -__BIONIC_SIGDEF(VTALRM,28,"Virtual timer expired") -__BIONIC_SIGDEF(PROF,29,"Profiling timer expired") -__BIONIC_SIGDEF(XCPU,30,"CPU time limit exceeded") -__BIONIC_SIGDEF(XFSZ,31,"File size limit exceeded") -#else -__BIONIC_SIGDEF(STKFLT,16,"Stack fault") -__BIONIC_SIGDEF(CHLD,17,"Child exited") -__BIONIC_SIGDEF(CONT,18,"Continue") -__BIONIC_SIGDEF(STOP,19,"Stopped (signal)") -__BIONIC_SIGDEF(TSTP,20,"Stopped") -__BIONIC_SIGDEF(TTIN,21,"Stopped (tty input)") -__BIONIC_SIGDEF(TTOU,22,"Stopped (tty output)") -__BIONIC_SIGDEF(URG,23,"Urgent I/O condition") -__BIONIC_SIGDEF(XCPU,24,"CPU time limit exceeded") -__BIONIC_SIGDEF(XFSZ,25,"File size limit exceeded") -__BIONIC_SIGDEF(VTALRM,26,"Virtual timer expired") -__BIONIC_SIGDEF(PROF,27,"Profiling timer expired") -__BIONIC_SIGDEF(WINCH,28,"Window size changed") -__BIONIC_SIGDEF(IO,29,"I/O possible") -__BIONIC_SIGDEF(PWR,30,"Power failure") -__BIONIC_SIGDEF(SYS,31,"Bad system call") +__BIONIC_SIGDEF(SIGFPE, "Floating point exception") +__BIONIC_SIGDEF(SIGKILL, "Killed") +__BIONIC_SIGDEF(SIGBUS, "Bus error") +__BIONIC_SIGDEF(SIGSEGV, "Segmentation fault") +__BIONIC_SIGDEF(SIGPIPE, "Broken pipe") +__BIONIC_SIGDEF(SIGALRM, "Alarm clock") +__BIONIC_SIGDEF(SIGTERM, "Terminated") +__BIONIC_SIGDEF(SIGUSR1, "User signal 1") +__BIONIC_SIGDEF(SIGUSR2, "User signal 2") +__BIONIC_SIGDEF(SIGCHLD, "Child exited") +__BIONIC_SIGDEF(SIGPWR, "Power failure") +__BIONIC_SIGDEF(SIGWINCH, "Window size changed") +__BIONIC_SIGDEF(SIGURG, "Urgent I/O condition") +__BIONIC_SIGDEF(SIGIO, "I/O possible") +__BIONIC_SIGDEF(SIGSTOP, "Stopped (signal)") +__BIONIC_SIGDEF(SIGTSTP, "Stopped") +__BIONIC_SIGDEF(SIGCONT, "Continue") +__BIONIC_SIGDEF(SIGTTIN, "Stopped (tty input)") +__BIONIC_SIGDEF(SIGTTOU, "Stopped (tty output)") +__BIONIC_SIGDEF(SIGVTALRM, "Virtual timer expired") +__BIONIC_SIGDEF(SIGPROF, "Profiling timer expired") +__BIONIC_SIGDEF(SIGXCPU, "CPU time limit exceeded") +__BIONIC_SIGDEF(SIGXFSZ, "File size limit exceeded") +#if defined(SIGSTKFLT) +__BIONIC_SIGDEF(SIGSTKFLT, "Stack fault") #endif +__BIONIC_SIGDEF(SIGSYS, "Bad system call") #undef __BIONIC_SIGDEF diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/_system_properties.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/_system_properties.h index 5eee7f0..5a681df 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/_system_properties.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/_system_properties.h @@ -139,6 +139,14 @@ int __system_property_foreach_compat( void (*propfn)(const prop_info *pi, void *cookie), void *cookie); +/* Initialize the system properties area in read only mode. + * Should be done by all processes that need to read system + * properties. + * + * Returns 0 on success, -1 otherwise. + */ +int __system_properties_init(); + __END_DECLS #endif diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/_types.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/_types.h index 6bf9c1c..7b99e06 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/_types.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/_types.h @@ -32,50 +32,15 @@ */ #ifndef _SYS__TYPES_H_ -#define _SYS__TYPES_H_ +#define _SYS__TYPES_H_ -typedef __signed char __int8_t; -typedef unsigned char __uint8_t; -typedef short __int16_t; -typedef unsigned short __uint16_t; -typedef int __int32_t; -typedef unsigned int __uint32_t; -#if __LP64__ -typedef long __int64_t; -typedef unsigned long __uint64_t; -#else -typedef long long __int64_t; -typedef unsigned long long __uint64_t; -#endif +#undef __KERNEL_STRICT_NAMES +#define __KERNEL_STRICT_NAMES 1 -#if __LP64__ -typedef long __intptr_t; -typedef unsigned long __uintptr_t; -#else -typedef int __intptr_t; -typedef unsigned int __uintptr_t; -#endif - -#if __LP64__ -typedef long __time_t; -#else -typedef int __time_t; /* Historical accident. */ -#endif - -typedef int __timer_t; - -typedef int __clockid_t; - -#ifndef __cplusplus -typedef int __wchar_t; -#endif - -typedef double __double_t; -typedef float __float_t; - -typedef __builtin_va_list __va_list; +#include <machine/_types.h> typedef unsigned long __cpuid_t; /* CPU id */ +typedef __int32_t __dev_t; /* device number */ typedef __uint32_t __fixpt_t; /* fixed point number */ typedef __uint32_t __gid_t; /* group id */ typedef __uint32_t __id_t; /* may contain pid, uid or gid */ @@ -104,4 +69,9 @@ typedef union { __int64_t __mbstateL; /* for alignment */ } __mbstate_t; +/* BIONIC: if we're using non-cleaned up user-level kernel headers, + * this will prevent many type declaration conflicts + */ +#define __KERNEL_STRICT_NAMES 1 + #endif /* !_SYS__TYPES_H_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/exec_elf.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/exec_elf.h index d14c596..f72f81e 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/exec_elf.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/exec_elf.h @@ -1,11 +1,6 @@ -/* $NetBSD: exec_elf.h,v 1.131 2013/10/29 00:22:59 christos Exp $ */ - -/*- - * Copyright (c) 1994 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by Christos Zoulas. +/* $OpenBSD: exec_elf.h,v 1.41 2006/01/06 18:53:05 millert Exp $ */ +/* + * Copyright (c) 1995, 1996 Erik Theisen. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -15,164 +10,101 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * This is the ELF ABI header file + * formerly known as "elf_abi.h". */ #ifndef _SYS_EXEC_ELF_H_ #define _SYS_EXEC_ELF_H_ -/* - * The current ELF ABI specification is available at: - * http://www.sco.com/developers/gabi/ - * - * Current header definitions are in: - * http://www.sco.com/developers/gabi/latest/ch4.eheader.html - */ +#include <machine/_types.h> +#include <machine/exec.h> -#if defined(_KERNEL) || defined(_STANDALONE) -#include <sys/types.h> -#else -#include <inttypes.h> -#endif /* _KERNEL || _STANDALONE */ +typedef __uint8_t Elf_Byte; -#if HAVE_NBTOOL_CONFIG_H -#include <nbinclude/machine/elf_machdep.h> +typedef __uint32_t Elf32_Addr; /* Unsigned program address */ +typedef __uint32_t Elf32_Off; /* Unsigned file offset */ +typedef __int32_t Elf32_Sword; /* Signed large integer */ +typedef __uint32_t Elf32_Word; /* Unsigned large integer */ +typedef __uint16_t Elf32_Half; /* Unsigned medium integer */ + +typedef __uint64_t Elf64_Addr; +typedef __uint64_t Elf64_Off; +typedef __int32_t Elf64_Shalf; + +#ifdef __alpha__ +typedef __int64_t Elf64_Sword; +typedef __uint64_t Elf64_Word; #else -#include <machine/elf_machdep.h> +typedef __int32_t Elf64_Sword; +typedef __uint32_t Elf64_Word; #endif -typedef uint8_t Elf_Byte; - -typedef uint32_t Elf32_Addr; -#define ELF32_FSZ_ADDR 4 -typedef uint32_t Elf32_Off; -typedef int32_t Elf32_SOff; -#define ELF32_FSZ_OFF 4 -typedef int32_t Elf32_Sword; -#define ELF32_FSZ_SWORD 4 -typedef uint32_t Elf32_Word; -#define ELF32_FSZ_WORD 4 -typedef uint16_t Elf32_Half; -#define ELF32_FSZ_HALF 2 -typedef uint64_t Elf32_Lword; -#define ELF32_FSZ_LWORD 8 - -typedef uint64_t Elf64_Addr; -#define ELF64_FSZ_ADDR 8 -typedef uint64_t Elf64_Off; -typedef int64_t Elf64_SOff; -#define ELF64_FSZ_OFF 8 -typedef int32_t Elf64_Shalf; -#define ELF64_FSZ_SHALF 4 - -typedef int32_t Elf64_Sword; -#define ELF64_FSZ_SWORD 4 -typedef uint32_t Elf64_Word; -#define ELF64_FSZ_WORD 4 - -typedef int64_t Elf64_Sxword; -#define ELF64_FSZ_SXWORD 8 -typedef uint64_t Elf64_Xword; -#define ELF64_FSZ_XWORD 8 -typedef uint64_t Elf64_Lword; -#define ELF64_FSZ_LWORD 8 -typedef uint16_t Elf64_Half; -#define ELF64_FSZ_HALF 2 +typedef __int64_t Elf64_Sxword; +typedef __uint64_t Elf64_Xword; + +typedef __uint32_t Elf64_Half; +typedef __uint16_t Elf64_Quarter; /* - * ELF Header + * e_ident[] identification indexes + * See http://www.caldera.com/developers/gabi/2000-07-17/ch4.eheader.html */ -#define ELF_NIDENT 16 - -typedef struct { - unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ - Elf32_Half e_type; /* file type */ - Elf32_Half e_machine; /* machine type */ - Elf32_Word e_version; /* version number */ - Elf32_Addr e_entry; /* entry point */ - Elf32_Off e_phoff; /* Program hdr offset */ - Elf32_Off e_shoff; /* Section hdr offset */ - Elf32_Word e_flags; /* Processor flags */ - Elf32_Half e_ehsize; /* sizeof ehdr */ - Elf32_Half e_phentsize; /* Program header entry size */ - Elf32_Half e_phnum; /* Number of program headers */ - Elf32_Half e_shentsize; /* Section header entry size */ - Elf32_Half e_shnum; /* Number of section headers */ - Elf32_Half e_shstrndx; /* String table index */ -} Elf32_Ehdr; - -typedef struct { - unsigned char e_ident[ELF_NIDENT]; /* Id bytes */ - Elf64_Half e_type; /* file type */ - Elf64_Half e_machine; /* machine type */ - Elf64_Word e_version; /* version number */ - Elf64_Addr e_entry; /* entry point */ - Elf64_Off e_phoff; /* Program hdr offset */ - Elf64_Off e_shoff; /* Section hdr offset */ - Elf64_Word e_flags; /* Processor flags */ - Elf64_Half e_ehsize; /* sizeof ehdr */ - Elf64_Half e_phentsize; /* Program header entry size */ - Elf64_Half e_phnum; /* Number of program headers */ - Elf64_Half e_shentsize; /* Section header entry size */ - Elf64_Half e_shnum; /* Number of section headers */ - Elf64_Half e_shstrndx; /* String table index */ -} Elf64_Ehdr; - -/* e_ident offsets */ -#define EI_MAG0 0 /* '\177' */ -#define EI_MAG1 1 /* 'E' */ -#define EI_MAG2 2 /* 'L' */ -#define EI_MAG3 3 /* 'F' */ -#define EI_CLASS 4 /* File class */ -#define EI_DATA 5 /* Data encoding */ -#define EI_VERSION 6 /* File version */ -#define EI_OSABI 7 /* Operating system/ABI identification */ -#define EI_ABIVERSION 8 /* ABI version */ -#define EI_PAD 9 /* Start of padding bytes up to EI_NIDENT*/ -#define EI_NIDENT 16 /* First non-ident header byte */ - -/* e_ident[EI_MAG0,EI_MAG3] */ -#define ELFMAG0 0x7f -#define ELFMAG1 'E' -#define ELFMAG2 'L' -#define ELFMAG3 'F' -#define ELFMAG "\177ELF" -#define SELFMAG 4 - -/* e_ident[EI_CLASS] */ -#define ELFCLASSNONE 0 /* Invalid class */ -#define ELFCLASS32 1 /* 32-bit objects */ -#define ELFCLASS64 2 /* 64-bit objects */ -#define ELFCLASSNUM 3 - -/* e_ident[EI_DATA] */ -#define ELFDATANONE 0 /* Invalid data encoding */ -#define ELFDATA2LSB 1 /* 2's complement values, LSB first */ -#define ELFDATA2MSB 2 /* 2's complement values, MSB first */ - -/* e_ident[EI_VERSION] */ -#define EV_NONE 0 /* Invalid version */ -#define EV_CURRENT 1 /* Current version */ -#define EV_NUM 2 - -/* e_ident[EI_OSABI] */ +#define EI_MAG0 0 /* file ID */ +#define EI_MAG1 1 /* file ID */ +#define EI_MAG2 2 /* file ID */ +#define EI_MAG3 3 /* file ID */ +#define EI_CLASS 4 /* file class */ +#define EI_DATA 5 /* data encoding */ +#define EI_VERSION 6 /* ELF header version */ +#define EI_OSABI 7 /* OS/ABI ID */ +#define EI_ABIVERSION 8 /* ABI version */ +#define EI_PAD 9 /* start of pad bytes */ +#define EI_NIDENT 16 /* Size of e_ident[] */ + +/* e_ident[] magic number */ +#define ELFMAG0 0x7f /* e_ident[EI_MAG0] */ +#define ELFMAG1 'E' /* e_ident[EI_MAG1] */ +#define ELFMAG2 'L' /* e_ident[EI_MAG2] */ +#define ELFMAG3 'F' /* e_ident[EI_MAG3] */ +#define ELFMAG "\177ELF" /* magic */ +#define SELFMAG 4 /* size of magic */ + +/* e_ident[] file class */ +#define ELFCLASSNONE 0 /* invalid */ +#define ELFCLASS32 1 /* 32-bit objs */ +#define ELFCLASS64 2 /* 64-bit objs */ +#define ELFCLASSNUM 3 /* number of classes */ + +/* e_ident[] data encoding */ +#define ELFDATANONE 0 /* invalid */ +#define ELFDATA2LSB 1 /* Little-Endian */ +#define ELFDATA2MSB 2 /* Big-Endian */ +#define ELFDATANUM 3 /* number of data encode defines */ + +/* e_ident[] Operating System/ABI */ #define ELFOSABI_SYSV 0 /* UNIX System V ABI */ #define ELFOSABI_HPUX 1 /* HP-UX operating system */ #define ELFOSABI_NETBSD 2 /* NetBSD */ #define ELFOSABI_LINUX 3 /* GNU/Linux */ #define ELFOSABI_HURD 4 /* GNU/Hurd */ -#define ELFOSABI_86OPEN 5 /* 86Open */ +#define ELFOSABI_86OPEN 5 /* 86Open common IA32 ABI */ #define ELFOSABI_SOLARIS 6 /* Solaris */ #define ELFOSABI_MONTEREY 7 /* Monterey */ #define ELFOSABI_IRIX 8 /* IRIX */ @@ -180,832 +112,421 @@ typedef struct { #define ELFOSABI_TRU64 10 /* TRU64 UNIX */ #define ELFOSABI_MODESTO 11 /* Novell Modesto */ #define ELFOSABI_OPENBSD 12 /* OpenBSD */ -#define ELFOSABI_OPENVMS 13 /* OpenVMS */ -#define ELFOSABI_NSK 14 /* HP Non-Stop Kernel */ -#define ELFOSABI_AROS 15 /* Amiga Research OS */ -/* Unofficial OSABIs follow */ #define ELFOSABI_ARM 97 /* ARM */ #define ELFOSABI_STANDALONE 255 /* Standalone (embedded) application */ -#define ELFOSABI_NONE ELFOSABI_SYSV -#define ELFOSABI_AIX ELFOSABI_MONTEREY - -/* e_type */ -#define ET_NONE 0 /* No file type */ -#define ET_REL 1 /* Relocatable file */ -#define ET_EXEC 2 /* Executable file */ -#define ET_DYN 3 /* Shared object file */ -#define ET_CORE 4 /* Core file */ -#define ET_NUM 5 - -#define ET_LOOS 0xfe00 /* Operating system specific range */ -#define ET_HIOS 0xfeff -#define ET_LOPROC 0xff00 /* Processor-specific range */ -#define ET_HIPROC 0xffff - -/* e_machine */ -#define EM_NONE 0 /* No machine */ -#define EM_M32 1 /* AT&T WE 32100 */ -#define EM_SPARC 2 /* SPARC */ -#define EM_386 3 /* Intel 80386 */ -#define EM_68K 4 /* Motorola 68000 */ -#define EM_88K 5 /* Motorola 88000 */ -#define EM_486 6 /* Intel 80486 */ -#define EM_860 7 /* Intel 80860 */ -#define EM_MIPS 8 /* MIPS I Architecture */ -#define EM_S370 9 /* Amdahl UTS on System/370 */ -#define EM_MIPS_RS3_LE 10 /* MIPS RS3000 Little-endian */ - /* 11-14 - Reserved */ -#define EM_RS6000 11 /* IBM RS/6000 XXX reserved */ -#define EM_PARISC 15 /* Hewlett-Packard PA-RISC */ -#define EM_NCUBE 16 /* NCube XXX reserved */ -#define EM_VPP500 17 /* Fujitsu VPP500 */ -#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ -#define EM_960 19 /* Intel 80960 */ -#define EM_PPC 20 /* PowerPC */ -#define EM_PPC64 21 /* 64-bit PowerPC */ - /* 22-35 - Reserved */ -#define EM_S390 22 /* System/390 XXX reserved */ -#define EM_V800 36 /* NEC V800 */ -#define EM_FR20 37 /* Fujitsu FR20 */ -#define EM_RH32 38 /* TRW RH-32 */ -#define EM_RCE 39 /* Motorola RCE */ -#define EM_ARM 40 /* Advanced RISC Machines ARM */ -#define EM_ALPHA 41 /* DIGITAL Alpha */ -#define EM_SH 42 /* Hitachi Super-H */ -#define EM_SPARCV9 43 /* SPARC Version 9 */ -#define EM_TRICORE 44 /* Siemens Tricore */ -#define EM_ARC 45 /* Argonaut RISC Core */ -#define EM_H8_300 46 /* Hitachi H8/300 */ -#define EM_H8_300H 47 /* Hitachi H8/300H */ -#define EM_H8S 48 /* Hitachi H8S */ -#define EM_H8_500 49 /* Hitachi H8/500 */ -#define EM_IA_64 50 /* Intel Merced Processor */ -#define EM_MIPS_X 51 /* Stanford MIPS-X */ -#define EM_COLDFIRE 52 /* Motorola Coldfire */ -#define EM_68HC12 53 /* Motorola MC68HC12 */ -#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */ -#define EM_PCP 55 /* Siemens PCP */ -#define EM_NCPU 56 /* Sony nCPU embedded RISC processor */ -#define EM_NDR1 57 /* Denso NDR1 microprocessor */ -#define EM_STARCORE 58 /* Motorola Star*Core processor */ -#define EM_ME16 59 /* Toyota ME16 processor */ -#define EM_ST100 60 /* STMicroelectronics ST100 processor */ -#define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded family processor */ -#define EM_X86_64 62 /* AMD x86-64 architecture */ -#define EM_PDSP 63 /* Sony DSP Processor */ -#define EM_PDP10 64 /* Digital Equipment Corp. PDP-10 */ -#define EM_PDP11 65 /* Digital Equipment Corp. PDP-11 */ -#define EM_FX66 66 /* Siemens FX66 microcontroller */ -#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 bit microcontroller */ -#define EM_ST7 68 /* STMicroelectronics ST7 8-bit microcontroller */ -#define EM_68HC16 69 /* Motorola MC68HC16 Microcontroller */ -#define EM_68HC11 70 /* Motorola MC68HC11 Microcontroller */ -#define EM_68HC08 71 /* Motorola MC68HC08 Microcontroller */ -#define EM_68HC05 72 /* Motorola MC68HC05 Microcontroller */ -#define EM_SVX 73 /* Silicon Graphics SVx */ -#define EM_ST19 74 /* STMicroelectronics ST19 8-bit CPU */ -#define EM_VAX 75 /* Digital VAX */ -#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */ -#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded CPU */ -#define EM_FIREPATH 78 /* Element 14 64-bit DSP processor */ -#define EM_ZSP 79 /* LSI Logic's 16-bit DSP processor */ -#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */ -#define EM_HUANY 81 /* Harvard's machine-independent format */ -#define EM_PRISM 82 /* SiTera Prism */ -#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */ -#define EM_FR30 84 /* Fujitsu FR30 */ -#define EM_D10V 85 /* Mitsubishi D10V */ -#define EM_D30V 86 /* Mitsubishi D30V */ -#define EM_V850 87 /* NEC v850 */ -#define EM_M32R 88 /* Mitsubishi M32R */ -#define EM_MN10300 89 /* Matsushita MN10300 */ -#define EM_MN10200 90 /* Matsushita MN10200 */ -#define EM_PJ 91 /* picoJava */ -#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */ -#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */ -#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */ -#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */ -#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Processor */ -#define EM_NS32K 97 /* National Semiconductor 32000 series */ -#define EM_TPC 98 /* Tenor Network TPC processor */ -#define EM_SNP1K 99 /* Trebia SNP 1000 processor */ -#define EM_ST200 100 /* STMicroelectronics ST200 microcontroller */ -#define EM_IP2K 101 /* Ubicom IP2xxx microcontroller family */ -#define EM_MAX 102 /* MAX processor */ -#define EM_CR 103 /* National Semiconductor CompactRISC micorprocessor */ -#define EM_F2MC16 104 /* Fujitsu F2MC16 */ -#define EM_MSP430 105 /* Texas Instruments MSP430 */ -#define EM_BLACKFIN 106 /* Analog Devices Blackfin DSP */ -#define EM_SE_C33 107 /* Seiko Epson S1C33 family */ -#define EM_SEP 108 /* Sharp embedded microprocessor */ -#define EM_ARCA 109 /* Arca RISC microprocessor */ -#define EM_UNICORE 110 /* UNICORE from PKU-Unity Ltd. and MPRC Peking University */ -#define EM_AARCH64 183 /* AArch64 64-bit ARM microprocessor */ - -/* Unofficial machine types follow */ -#define EM_AVR32 6317 /* used by NetBSD/avr32 */ -#define EM_ALPHA_EXP 36902 /* used by NetBSD/alpha; obsolete */ -#define EM_NUM 36903 - -/* - * Program Header - */ -typedef struct { - Elf32_Word p_type; /* entry type */ - Elf32_Off p_offset; /* offset */ - Elf32_Addr p_vaddr; /* virtual address */ - Elf32_Addr p_paddr; /* physical address */ - Elf32_Word p_filesz; /* file size */ - Elf32_Word p_memsz; /* memory size */ - Elf32_Word p_flags; /* flags */ - Elf32_Word p_align; /* memory & file alignment */ -} Elf32_Phdr; +/* e_ident */ +#define IS_ELF(ehdr) ((ehdr).e_ident[EI_MAG0] == ELFMAG0 && \ + (ehdr).e_ident[EI_MAG1] == ELFMAG1 && \ + (ehdr).e_ident[EI_MAG2] == ELFMAG2 && \ + (ehdr).e_ident[EI_MAG3] == ELFMAG3) + +/* ELF Header */ +typedef struct elfhdr { + unsigned char e_ident[EI_NIDENT]; /* ELF Identification */ + Elf32_Half e_type; /* object file type */ + Elf32_Half e_machine; /* machine */ + Elf32_Word e_version; /* object file version */ + Elf32_Addr e_entry; /* virtual entry point */ + Elf32_Off e_phoff; /* program header table offset */ + Elf32_Off e_shoff; /* section header table offset */ + Elf32_Word e_flags; /* processor-specific flags */ + Elf32_Half e_ehsize; /* ELF header size */ + Elf32_Half e_phentsize; /* program header entry size */ + Elf32_Half e_phnum; /* number of program header entries */ + Elf32_Half e_shentsize; /* section header entry size */ + Elf32_Half e_shnum; /* number of section header entries */ + Elf32_Half e_shstrndx; /* section header table's "section + header string table" entry offset */ +} Elf32_Ehdr; typedef struct { - Elf64_Word p_type; /* entry type */ - Elf64_Word p_flags; /* flags */ - Elf64_Off p_offset; /* offset */ - Elf64_Addr p_vaddr; /* virtual address */ - Elf64_Addr p_paddr; /* physical address */ - Elf64_Xword p_filesz; /* file size */ - Elf64_Xword p_memsz; /* memory size */ - Elf64_Xword p_align; /* memory & file alignment */ -} Elf64_Phdr; - -/* p_type */ -#define PT_NULL 0 /* Program header table entry unused */ -#define PT_LOAD 1 /* Loadable program segment */ -#define PT_DYNAMIC 2 /* Dynamic linking information */ -#define PT_INTERP 3 /* Program interpreter */ -#define PT_NOTE 4 /* Auxiliary information */ -#define PT_SHLIB 5 /* Reserved, unspecified semantics */ -#define PT_PHDR 6 /* Entry for header table itself */ -#define PT_TLS 7 /* TLS initialisation image */ -#define PT_NUM 8 - -#define PT_LOOS 0x60000000 /* OS-specific range */ - -/* GNU-specific */ -#define PT_GNU_EH_FRAME 0x6474e550 /* EH frame segment */ -#define PT_GNU_STACK 0x6474e551 /* Indicate executable stack */ -#define PT_GNU_RELRO 0x6474e552 /* Make read-only after relocation */ - -#define PT_HIOS 0x6fffffff -#define PT_LOPROC 0x70000000 /* Processor-specific range */ -#define PT_HIPROC 0x7fffffff - -#define PT_MIPS_REGINFO 0x70000000 - -/* p_flags */ -#define PF_R 0x4 /* Segment is readable */ -#define PF_W 0x2 /* Segment is writable */ -#define PF_X 0x1 /* Segment is executable */ - -#define PF_MASKOS 0x0ff00000 /* Operating system specific values */ -#define PF_MASKPROC 0xf0000000 /* Processor-specific values */ + unsigned char e_ident[EI_NIDENT]; /* Id bytes */ + Elf64_Quarter e_type; /* file type */ + Elf64_Quarter e_machine; /* machine type */ + Elf64_Half e_version; /* version number */ + Elf64_Addr e_entry; /* entry point */ + Elf64_Off e_phoff; /* Program hdr offset */ + Elf64_Off e_shoff; /* Section hdr offset */ + Elf64_Half e_flags; /* Processor flags */ + Elf64_Quarter e_ehsize; /* sizeof ehdr */ + Elf64_Quarter e_phentsize; /* Program header entry size */ + Elf64_Quarter e_phnum; /* Number of program headers */ + Elf64_Quarter e_shentsize; /* Section header entry size */ + Elf64_Quarter e_shnum; /* Number of section headers */ + Elf64_Quarter e_shstrndx; /* String table index */ +} Elf64_Ehdr; -/* Extended program header index. */ -#define PN_XNUM 0xffff +/* e_type */ +#define ET_NONE 0 /* No file type */ +#define ET_REL 1 /* relocatable file */ +#define ET_EXEC 2 /* executable file */ +#define ET_DYN 3 /* shared object file */ +#define ET_CORE 4 /* core file */ +#define ET_NUM 5 /* number of types */ +#define ET_LOPROC 0xff00 /* reserved range for processor */ +#define ET_HIPROC 0xffff /* specific e_type */ -/* - * Section Headers +/* e_machine */ +#define EM_NONE 0 /* No Machine */ +#define EM_M32 1 /* AT&T WE 32100 */ +#define EM_SPARC 2 /* SPARC */ +#define EM_386 3 /* Intel 80386 */ +#define EM_68K 4 /* Motorola 68000 */ +#define EM_88K 5 /* Motorola 88000 */ +#define EM_486 6 /* Intel 80486 - unused? */ +#define EM_860 7 /* Intel 80860 */ +#define EM_MIPS 8 /* MIPS R3000 Big-Endian only */ +/* + * Don't know if EM_MIPS_RS4_BE, + * EM_SPARC64, EM_PARISC, + * or EM_PPC are ABI compliant */ +#define EM_MIPS_RS4_BE 10 /* MIPS R4000 Big-Endian */ +#define EM_SPARC64 11 /* SPARC v9 64-bit unoffical */ +#define EM_PARISC 15 /* HPPA */ +#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */ +#define EM_PPC 20 /* PowerPC */ +#define EM_ARM 40 /* Advanced RISC Machines ARM */ +#define EM_ALPHA 41 /* DEC ALPHA */ +#define EM_SPARCV9 43 /* SPARC version 9 */ +#define EM_ALPHA_EXP 0x9026 /* DEC ALPHA */ +#define EM_AMD64 62 /* AMD64 architecture */ +#define EM_VAX 75 /* DEC VAX */ +#define EM_NUM 15 /* number of machine types */ + +/* Version */ +#define EV_NONE 0 /* Invalid */ +#define EV_CURRENT 1 /* Current */ +#define EV_NUM 2 /* number of versions */ + +/* Section Header */ typedef struct { - Elf32_Word sh_name; /* section name (.shstrtab index) */ - Elf32_Word sh_type; /* section type */ - Elf32_Word sh_flags; /* section flags */ - Elf32_Addr sh_addr; /* virtual address */ + Elf32_Word sh_name; /* name - index into section header + string table section */ + Elf32_Word sh_type; /* type */ + Elf32_Word sh_flags; /* flags */ + Elf32_Addr sh_addr; /* address */ Elf32_Off sh_offset; /* file offset */ Elf32_Word sh_size; /* section size */ - Elf32_Word sh_link; /* link to another */ - Elf32_Word sh_info; /* misc info */ - Elf32_Word sh_addralign; /* memory alignment */ - Elf32_Word sh_entsize; /* table entry size */ + Elf32_Word sh_link; /* section header table index link */ + Elf32_Word sh_info; /* extra information */ + Elf32_Word sh_addralign; /* address alignment */ + Elf32_Word sh_entsize; /* section entry size */ } Elf32_Shdr; typedef struct { - Elf64_Word sh_name; /* section name (.shstrtab index) */ - Elf64_Word sh_type; /* section type */ + Elf64_Half sh_name; /* section name */ + Elf64_Half sh_type; /* section type */ Elf64_Xword sh_flags; /* section flags */ Elf64_Addr sh_addr; /* virtual address */ Elf64_Off sh_offset; /* file offset */ Elf64_Xword sh_size; /* section size */ - Elf64_Word sh_link; /* link to another */ - Elf64_Word sh_info; /* misc info */ + Elf64_Half sh_link; /* link to another */ + Elf64_Half sh_info; /* misc info */ Elf64_Xword sh_addralign; /* memory alignment */ Elf64_Xword sh_entsize; /* table entry size */ } Elf64_Shdr; +/* Special Section Indexes */ +#define SHN_UNDEF 0 /* undefined */ +#define SHN_LORESERVE 0xff00 /* lower bounds of reserved indexes */ +#define SHN_LOPROC 0xff00 /* reserved range for processor */ +#define SHN_HIPROC 0xff1f /* specific section indexes */ +#define SHN_ABS 0xfff1 /* absolute value */ +#define SHN_COMMON 0xfff2 /* common symbol */ +#define SHN_HIRESERVE 0xffff /* upper bounds of reserved indexes */ + /* sh_type */ -#define SHT_NULL 0 /* Section header table entry unused */ -#define SHT_PROGBITS 1 /* Program information */ -#define SHT_SYMTAB 2 /* Symbol table */ -#define SHT_STRTAB 3 /* String table */ -#define SHT_RELA 4 /* Relocation information w/ addend */ -#define SHT_HASH 5 /* Symbol hash table */ -#define SHT_DYNAMIC 6 /* Dynamic linking information */ -#define SHT_NOTE 7 /* Auxiliary information */ -#define SHT_NOBITS 8 /* No space allocated in file image */ -#define SHT_REL 9 /* Relocation information w/o addend */ -#define SHT_SHLIB 10 /* Reserved, unspecified semantics */ -#define SHT_DYNSYM 11 /* Symbol table for dynamic linker */ -#define SHT_INIT_ARRAY 14 /* Initialization function pointers */ -#define SHT_FINI_ARRAY 15 /* Termination function pointers */ -#define SHT_PREINIT_ARRAY 16 /* Pre-initialization function ptrs */ -#define SHT_GROUP 17 /* Section group */ -#define SHT_SYMTAB_SHNDX 18 /* Section indexes (see SHN_XINDEX) */ -#define SHT_NUM 19 - -#define SHT_LOOS 0x60000000 /* Operating system specific range */ -#define SHT_GNU_HASH 0x6ffffff6 /* GNU style symbol hash table */ -#define SHT_SUNW_move 0x6ffffffa -#define SHT_SUNW_syminfo 0x6ffffffc -#define SHT_SUNW_verdef 0x6ffffffd /* Versions defined by file */ -#define SHT_GNU_verdef SHT_SUNW_verdef -#define SHT_SUNW_verneed 0x6ffffffe /* Versions needed by file */ -#define SHT_GNU_verneed SHT_SUNW_verneed -#define SHT_SUNW_versym 0x6fffffff /* Symbol versions */ -#define SHT_GNU_versym SHT_SUNW_versym -#define SHT_HIOS 0x6fffffff -#define SHT_LOPROC 0x70000000 /* Processor-specific range */ -#define SHT_AMD64_UNWIND 0x70000001 /* unwind information */ -#define SHT_ARM_EXIDX 0x70000001 /* exception index table */ -#define SHT_ARM_PREEMPTMAP 0x70000002 /* BPABI DLL dynamic linking - * pre-emption map */ -#define SHT_ARM_ATTRIBUTES 0x70000003 /* Object file compatibility - * attributes */ -#define SHT_ARM_DEBUGOVERLAY 0x70000004 /* See DBGOVL for details */ -#define SHT_ARM_OVERLAYSECTION 0x70000005 -#define SHT_HIPROC 0x7fffffff -#define SHT_LOUSER 0x80000000 /* Application-specific range */ -#define SHT_HIUSER 0xffffffff - -/* sh_flags */ -#define SHF_WRITE 0x00000001 /* Contains writable data */ -#define SHF_ALLOC 0x00000002 /* Occupies memory */ -#define SHF_EXECINSTR 0x00000004 /* Contains executable insns */ -#define SHF_MERGE 0x00000010 /* Might be merged */ -#define SHF_STRINGS 0x00000020 /* Contains nul terminated strings */ -#define SHF_INFO_LINK 0x00000040 /* "sh_info" contains SHT index */ -#define SHF_LINK_ORDER 0x00000080 /* Preserve order after combining */ -#define SHF_OS_NONCONFORMING 0x00000100 /* OS specific handling required */ -#define SHF_GROUP 0x00000200 /* Is member of a group */ -#define SHF_TLS 0x00000400 /* Holds thread-local data */ -#define SHF_MASKOS 0x0ff00000 /* Operating system specific values */ -#define SHF_MASKPROC 0xf0000000 /* Processor-specific values */ -#define SHF_ORDERED 0x40000000 /* Ordering requirement (Solaris) */ -#define SHF_EXCLUDE 0x80000000 /* Excluded unless unles ref/alloc - (Solaris).*/ -/* - * Symbol Table - */ -typedef struct { - Elf32_Word st_name; /* Symbol name (.strtab index) */ - Elf32_Word st_value; /* value of symbol */ - Elf32_Word st_size; /* size of symbol */ - Elf_Byte st_info; /* type / binding attrs */ - Elf_Byte st_other; /* unused */ - Elf32_Half st_shndx; /* section index of symbol */ +#define SHT_NULL 0 /* inactive */ +#define SHT_PROGBITS 1 /* program defined information */ +#define SHT_SYMTAB 2 /* symbol table section */ +#define SHT_STRTAB 3 /* string table section */ +#define SHT_RELA 4 /* relocation section with addends*/ +#define SHT_HASH 5 /* symbol hash table section */ +#define SHT_DYNAMIC 6 /* dynamic section */ +#define SHT_NOTE 7 /* note section */ +#define SHT_NOBITS 8 /* no space section */ +#define SHT_REL 9 /* relation section without addends */ +#define SHT_SHLIB 10 /* reserved - purpose unknown */ +#define SHT_DYNSYM 11 /* dynamic symbol table section */ +#define SHT_NUM 12 /* number of section types */ +#define SHT_LOPROC 0x70000000 /* reserved range for processor */ +#define SHT_HIPROC 0x7fffffff /* specific section header types */ +#define SHT_LOUSER 0x80000000 /* reserved range for application */ +#define SHT_HIUSER 0xffffffff /* specific indexes */ + +/* Section names */ +#define ELF_BSS ".bss" /* uninitialized data */ +#define ELF_DATA ".data" /* initialized data */ +#define ELF_DEBUG ".debug" /* debug */ +#define ELF_DYNAMIC ".dynamic" /* dynamic linking information */ +#define ELF_DYNSTR ".dynstr" /* dynamic string table */ +#define ELF_DYNSYM ".dynsym" /* dynamic symbol table */ +#define ELF_FINI ".fini" /* termination code */ +#define ELF_GOT ".got" /* global offset table */ +#define ELF_HASH ".hash" /* symbol hash table */ +#define ELF_INIT ".init" /* initialization code */ +#define ELF_REL_DATA ".rel.data" /* relocation data */ +#define ELF_REL_FINI ".rel.fini" /* relocation termination code */ +#define ELF_REL_INIT ".rel.init" /* relocation initialization code */ +#define ELF_REL_DYN ".rel.dyn" /* relocaltion dynamic link info */ +#define ELF_REL_RODATA ".rel.rodata" /* relocation read-only data */ +#define ELF_REL_TEXT ".rel.text" /* relocation code */ +#define ELF_RODATA ".rodata" /* read-only data */ +#define ELF_SHSTRTAB ".shstrtab" /* section header string table */ +#define ELF_STRTAB ".strtab" /* string table */ +#define ELF_SYMTAB ".symtab" /* symbol table */ +#define ELF_TEXT ".text" /* code */ + + +/* Section Attribute Flags - sh_flags */ +#define SHF_WRITE 0x1 /* Writable */ +#define SHF_ALLOC 0x2 /* occupies memory */ +#define SHF_EXECINSTR 0x4 /* executable */ +#define SHF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific section attributes */ + +/* Symbol Table Entry */ +typedef struct elf32_sym { + Elf32_Word st_name; /* name - index into string table */ + Elf32_Addr st_value; /* symbol value */ + Elf32_Word st_size; /* symbol size */ + unsigned char st_info; /* type and binding */ + unsigned char st_other; /* 0 - no defined meaning */ + Elf32_Half st_shndx; /* section header index */ } Elf32_Sym; typedef struct { - Elf64_Word st_name; /* Symbol name (.strtab index) */ + Elf64_Half st_name; /* Symbol name index in str table */ Elf_Byte st_info; /* type / binding attrs */ Elf_Byte st_other; /* unused */ - Elf64_Half st_shndx; /* section index of symbol */ - Elf64_Addr st_value; /* value of symbol */ + Elf64_Quarter st_shndx; /* section index of symbol */ + Elf64_Xword st_value; /* value of symbol */ Elf64_Xword st_size; /* size of symbol */ } Elf64_Sym; -/* Symbol Table index of the undefined symbol */ -#define ELF_SYM_UNDEFINED 0 - -#define STN_UNDEF 0 /* undefined index */ - -/* st_info: Symbol Bindings */ -#define STB_LOCAL 0 /* local symbol */ -#define STB_GLOBAL 1 /* global symbol */ -#define STB_WEAK 2 /* weakly defined global symbol */ -#define STB_NUM 3 - -#define STB_LOOS 10 /* Operating system specific range */ -#define STB_HIOS 12 -#define STB_LOPROC 13 /* Processor-specific range */ -#define STB_HIPROC 15 - -/* st_info: Symbol Types */ -#define STT_NOTYPE 0 /* Type not specified */ -#define STT_OBJECT 1 /* Associated with a data object */ -#define STT_FUNC 2 /* Associated with a function */ -#define STT_SECTION 3 /* Associated with a section */ -#define STT_FILE 4 /* Associated with a file name */ -#define STT_COMMON 5 /* Uninitialised common block */ -#define STT_TLS 6 /* Thread local data object */ -#define STT_NUM 7 - -#define STT_LOOS 10 /* Operating system specific range */ -#define STT_HIOS 12 -#define STT_LOPROC 13 /* Processor-specific range */ -#define STT_HIPROC 15 - -/* st_other: Visibility Types */ -#define STV_DEFAULT 0 /* use binding type */ -#define STV_INTERNAL 1 /* not referenced from outside */ -#define STV_HIDDEN 2 /* not visible, may be used via ptr */ -#define STV_PROTECTED 3 /* visible, not preemptible */ -#define STV_EXPORTED 4 -#define STV_SINGLETON 5 -#define STV_ELIMINATE 6 - -/* st_info/st_other utility macros */ -#define ELF_ST_BIND(info) ((uint32_t)(info) >> 4) -#define ELF_ST_TYPE(info) ((uint32_t)(info) & 0xf) -#define ELF_ST_INFO(bind,type) ((Elf_Byte)(((bind) << 4) | \ - ((type) & 0xf))) -#define ELF_ST_VISIBILITY(other) ((uint32_t)(other) & 3) - -/* - * Special section indexes - */ -#define SHN_UNDEF 0 /* Undefined section */ - -#define SHN_LORESERVE 0xff00 /* Reserved range */ -#define SHN_ABS 0xfff1 /* Absolute symbols */ -#define SHN_COMMON 0xfff2 /* Common symbols */ -#define SHN_XINDEX 0xffff /* Escape -- index stored elsewhere */ -#define SHN_HIRESERVE 0xffff - -#define SHN_LOPROC 0xff00 /* Processor-specific range */ -#define SHN_HIPROC 0xff1f -#define SHN_LOOS 0xff20 /* Operating system specific range */ -#define SHN_HIOS 0xff3f - -#define SHN_MIPS_ACOMMON 0xff00 -#define SHN_MIPS_TEXT 0xff01 -#define SHN_MIPS_DATA 0xff02 -#define SHN_MIPS_SCOMMON 0xff03 - -/* - * Relocation Entries - */ +/* Symbol table index */ +#define STN_UNDEF 0 /* undefined */ + +/* Extract symbol info - st_info */ +#define ELF32_ST_BIND(x) ((x) >> 4) +#define ELF32_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF32_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) + +#define ELF64_ST_BIND(x) ((x) >> 4) +#define ELF64_ST_TYPE(x) (((unsigned int) x) & 0xf) +#define ELF64_ST_INFO(b,t) (((b) << 4) + ((t) & 0xf)) + +/* Symbol Binding - ELF32_ST_BIND - st_info */ +#define STB_LOCAL 0 /* Local symbol */ +#define STB_GLOBAL 1 /* Global symbol */ +#define STB_WEAK 2 /* like global - lower precedence */ +#define STB_NUM 3 /* number of symbol bindings */ +#define STB_LOPROC 13 /* reserved range for processor */ +#define STB_HIPROC 15 /* specific symbol bindings */ + +/* Symbol type - ELF32_ST_TYPE - st_info */ +#define STT_NOTYPE 0 /* not specified */ +#define STT_OBJECT 1 /* data object */ +#define STT_FUNC 2 /* function */ +#define STT_SECTION 3 /* section */ +#define STT_FILE 4 /* file */ +#define STT_NUM 5 /* number of symbol types */ +#define STT_LOPROC 13 /* reserved range for processor */ +#define STT_HIPROC 15 /* specific symbol types */ + +/* Relocation entry with implicit addend */ typedef struct { - Elf32_Word r_offset; /* where to do it */ - Elf32_Word r_info; /* index & type of relocation */ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ } Elf32_Rel; +/* Relocation entry with explicit addend */ typedef struct { - Elf32_Word r_offset; /* where to do it */ - Elf32_Word r_info; /* index & type of relocation */ - Elf32_Sword r_addend; /* adjustment value */ + Elf32_Addr r_offset; /* offset of relocation */ + Elf32_Word r_info; /* symbol table index and type */ + Elf32_Sword r_addend; } Elf32_Rela; -/* r_info utility macros */ -#define ELF32_R_SYM(info) ((info) >> 8) -#define ELF32_R_TYPE(info) ((info) & 0xff) -#define ELF32_R_INFO(sym, type) (((sym) << 8) + (unsigned char)(type)) +/* Extract relocation info - r_info */ +#define ELF32_R_SYM(i) ((i) >> 8) +#define ELF32_R_TYPE(i) ((unsigned char) (i)) +#define ELF32_R_INFO(s,t) (((s) << 8) + (unsigned char)(t)) typedef struct { - Elf64_Addr r_offset; /* where to do it */ + Elf64_Xword r_offset; /* where to do it */ Elf64_Xword r_info; /* index & type of relocation */ } Elf64_Rel; typedef struct { - Elf64_Addr r_offset; /* where to do it */ + Elf64_Xword r_offset; /* where to do it */ Elf64_Xword r_info; /* index & type of relocation */ Elf64_Sxword r_addend; /* adjustment value */ } Elf64_Rela; -/* r_info utility macros */ -#if defined(__mips__) -#if defined(__MIPSEL__) -#define ELF64_R_SYM(info) (((info) >> 0) & 0xffffffff) -#define ELF64_R_SSYM(info) (((info) >> 32) & 0xff) -#define ELF64_R_TYPE3(info) (((info) >> 40) & 0xff) -#define ELF64_R_TYPE2(info) (((info) >> 48) & 0xff) -#define ELF64_R_TYPE(info) (((info) >> 56) & 0xff) -#define ELF64_R_INFO(sym,ssym,type,type2,type3) \ - (((type) << 56) + ((type2) << 48) + ((type3) << 40) + ((ssym) << 32) + (sym)) -#else -#define ELF64_R_SYM(info) (((info) >> 32) & 0xffffffff) -#define ELF64_R_SSYM(info) (((info) >> 24) & 0xff) -#define ELF64_R_TYPE3(info) (((info) >> 16) & 0xff) -#define ELF64_R_TYPE2(info) (((info) >> 8) & 0xff) -#define ELF64_R_TYPE(info) (((info) >> 0) & 0xff) -#define ELF64_R_INFO(sym,ssym,type,type2,type3) \ - (((sym) << 32) + ((ssym) << 24) + ((type3) << 16) + ((type2) << 8) + (type)) -#endif -#else -#define ELF64_R_SYM(info) ((info) >> 32) -#define ELF64_R_TYPE(info) ((info) & 0xffffffff) -#define ELF64_R_INFO(sym,type) (((sym) << 32) + (type)) -#endif - -/* - * Move entries - */ -typedef struct { - Elf32_Lword m_value; /* symbol value */ - Elf32_Word m_info; /* size + index */ - Elf32_Word m_poffset; /* symbol offset */ - Elf32_Half m_repeat; /* repeat count */ - Elf32_Half m_stride; /* stride info */ -} Elf32_Move; - -#define ELF32_M_SYM(info) ((info) >> 8) -#define ELF32_M_SIZE(info) ((info) & 0xff) -#define ELF32_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) +#define ELF64_R_SYM(info) ((info) >> 32) +#define ELF64_R_TYPE(info) ((info) & 0xFFFFFFFF) +#define ELF64_R_INFO(s,t) (((s) << 32) + (__uint32_t)(t)) +/* Program Header */ typedef struct { - Elf64_Lword m_value; /* symbol value */ - Elf64_Xword m_info; /* size + index */ - Elf64_Xword m_poffset; /* symbol offset */ - Elf64_Word m_repeat; /* repeat count */ - Elf64_Word m_stride; /* stride info */ -} Elf64_Move; - -#define ELF64_M_SYM(info) ((info) >> 8) -#define ELF64_M_SIZE(info) ((info) & 0xff) -#define ELF64_M_INFO(sym, size) (((sym) << 8) + (unsigned char)(size)) - -/* - * Hardware/software capabilities entry - */ -typedef struct { - Elf32_Word c_tag; /* entry tag value */ - union { - Elf32_Addr c_ptr; - Elf32_Word c_val; - } c_un; -} Elf32_Cap; + Elf32_Word p_type; /* segment type */ + Elf32_Off p_offset; /* segment offset */ + Elf32_Addr p_vaddr; /* virtual address of segment */ + Elf32_Addr p_paddr; /* physical address - ignored? */ + Elf32_Word p_filesz; /* number of bytes in file for seg. */ + Elf32_Word p_memsz; /* number of bytes in mem. for seg. */ + Elf32_Word p_flags; /* flags */ + Elf32_Word p_align; /* memory alignment */ +} Elf32_Phdr; typedef struct { - Elf64_Xword c_tag; /* entry tag value */ - union { - Elf64_Addr c_ptr; - Elf64_Xword c_val; - } c_un; -} Elf64_Cap; + Elf64_Half p_type; /* entry type */ + Elf64_Half p_flags; /* flags */ + Elf64_Off p_offset; /* offset */ + Elf64_Addr p_vaddr; /* virtual address */ + Elf64_Addr p_paddr; /* physical address */ + Elf64_Xword p_filesz; /* file size */ + Elf64_Xword p_memsz; /* memory size */ + Elf64_Xword p_align; /* memory & file alignment */ +} Elf64_Phdr; -/* - * Dynamic Section structure array - */ +/* Segment types - p_type */ +#define PT_NULL 0 /* unused */ +#define PT_LOAD 1 /* loadable segment */ +#define PT_DYNAMIC 2 /* dynamic linking section */ +#define PT_INTERP 3 /* the RTLD */ +#define PT_NOTE 4 /* auxiliary information */ +#define PT_SHLIB 5 /* reserved - purpose undefined */ +#define PT_PHDR 6 /* program header */ +#define PT_NUM 7 /* Number of segment types */ +#define PT_LOOS 0x60000000 /* reserved range for OS */ +#define PT_HIOS 0x6fffffff /* specific segment types */ +#define PT_LOPROC 0x70000000 /* reserved range for processor */ +#define PT_HIPROC 0x7fffffff /* specific segment types */ + +/* Segment flags - p_flags */ +#define PF_X 0x1 /* Executable */ +#define PF_W 0x2 /* Writable */ +#define PF_R 0x4 /* Readable */ +#define PF_MASKPROC 0xf0000000 /* reserved bits for processor */ + /* specific segment flags */ + +/* Dynamic structure */ typedef struct { - Elf32_Word d_tag; /* entry tag value */ + Elf32_Sword d_tag; /* controls meaning of d_val */ union { - Elf32_Addr d_ptr; - Elf32_Word d_val; + Elf32_Word d_val; /* Multiple meanings - see d_tag */ + Elf32_Addr d_ptr; /* program virtual address */ } d_un; } Elf32_Dyn; typedef struct { - Elf64_Xword d_tag; /* entry tag value */ + Elf64_Xword d_tag; /* controls meaning of d_val */ union { Elf64_Addr d_ptr; Elf64_Xword d_val; } d_un; } Elf64_Dyn; -/* d_tag */ -#define DT_NULL 0 /* Marks end of dynamic array */ -#define DT_NEEDED 1 /* Name of needed library (DT_STRTAB offset) */ -#define DT_PLTRELSZ 2 /* Size, in bytes, of relocations in PLT */ -#define DT_PLTGOT 3 /* Address of PLT and/or GOT */ -#define DT_HASH 4 /* Address of symbol hash table */ -#define DT_STRTAB 5 /* Address of string table */ -#define DT_SYMTAB 6 /* Address of symbol table */ -#define DT_RELA 7 /* Address of Rela relocation table */ -#define DT_RELASZ 8 /* Size, in bytes, of DT_RELA table */ -#define DT_RELAENT 9 /* Size, in bytes, of one DT_RELA entry */ -#define DT_STRSZ 10 /* Size, in bytes, of DT_STRTAB table */ -#define DT_SYMENT 11 /* Size, in bytes, of one DT_SYMTAB entry */ -#define DT_INIT 12 /* Address of initialization function */ -#define DT_FINI 13 /* Address of termination function */ -#define DT_SONAME 14 /* Shared object name (DT_STRTAB offset) */ -#define DT_RPATH 15 /* Library search path (DT_STRTAB offset) */ -#define DT_SYMBOLIC 16 /* Start symbol search within local object */ -#define DT_REL 17 /* Address of Rel relocation table */ -#define DT_RELSZ 18 /* Size, in bytes, of DT_REL table */ -#define DT_RELENT 19 /* Size, in bytes, of one DT_REL entry */ -#define DT_PLTREL 20 /* Type of PLT relocation entries */ -#define DT_DEBUG 21 /* Used for debugging; unspecified */ -#define DT_TEXTREL 22 /* Relocations might modify non-writable seg */ -#define DT_JMPREL 23 /* Address of relocations associated with PLT */ -#define DT_BIND_NOW 24 /* Process all relocations at load-time */ -#define DT_INIT_ARRAY 25 /* Address of initialization function array */ -#define DT_FINI_ARRAY 26 /* Size, in bytes, of DT_INIT_ARRAY array */ -#define DT_INIT_ARRAYSZ 27 /* Address of termination function array */ -#define DT_FINI_ARRAYSZ 28 /* Size, in bytes, of DT_FINI_ARRAY array*/ -#define DT_RUNPATH 29 /* overrides DT_RPATH */ -#define DT_FLAGS 30 /* Encodes ORIGIN, SYMBOLIC, TEXTREL, BIND_NOW, STATIC_TLS */ -#define DT_ENCODING 31 /* ??? */ -#define DT_PREINIT_ARRAY 32 /* Address of pre-init function array */ -#define DT_PREINIT_ARRAYSZ 33 /* Size, in bytes, of DT_PREINIT_ARRAY array */ -#define DT_NUM 34 - -#define DT_LOOS 0x60000000 /* Operating system specific range */ -#define DT_VERSYM 0x6ffffff0 /* Symbol versions */ -#define DT_FLAGS_1 0x6ffffffb /* ELF dynamic flags */ -#define DT_VERDEF 0x6ffffffc /* Versions defined by file */ -#define DT_VERDEFNUM 0x6ffffffd /* Number of versions defined by file */ -#define DT_VERNEED 0x6ffffffe /* Versions needed by file */ -#define DT_VERNEEDNUM 0x6fffffff /* Number of versions needed by file */ -#define DT_HIOS 0x6fffffff -#define DT_LOPROC 0x70000000 /* Processor-specific range */ -#define DT_HIPROC 0x7fffffff - -/* Flag values for DT_FLAGS */ -#define DF_ORIGIN 0x00000001 /* uses $ORIGIN */ -#define DF_SYMBOLIC 0x00000002 /* */ -#define DF_TEXTREL 0x00000004 /* */ -#define DF_BIND_NOW 0x00000008 /* */ -#define DF_STATICT_LS 0x00000010 /* */ - -/* Flag values for DT_FLAGS_1 (incomplete) */ -#define DF_1_BIND_NOW 0x00000001 /* Same as DF_BIND_NOW */ -#define DF_1_NODELETE 0x00000008 /* Set the RTLD_NODELETE for object */ -#define DF_1_INITFIRST 0x00000020 /* Object's init/fini take priority */ -#define DF_1_NOOPEN 0x00000040 /* Do not allow loading on dlopen() */ +/* Dynamic Array Tags - d_tag */ +#define DT_NULL 0 /* marks end of _DYNAMIC array */ +#define DT_NEEDED 1 /* string table offset of needed lib */ +#define DT_PLTRELSZ 2 /* size of relocation entries in PLT */ +#define DT_PLTGOT 3 /* address PLT/GOT */ +#define DT_HASH 4 /* address of symbol hash table */ +#define DT_STRTAB 5 /* address of string table */ +#define DT_SYMTAB 6 /* address of symbol table */ +#define DT_RELA 7 /* address of relocation table */ +#define DT_RELASZ 8 /* size of relocation table */ +#define DT_RELAENT 9 /* size of relocation entry */ +#define DT_STRSZ 10 /* size of string table */ +#define DT_SYMENT 11 /* size of symbol table entry */ +#define DT_INIT 12 /* address of initialization func. */ +#define DT_FINI 13 /* address of termination function */ +#define DT_SONAME 14 /* string table offset of shared obj */ +#define DT_RPATH 15 /* string table offset of library + search path */ +#define DT_SYMBOLIC 16 /* start sym search in shared obj. */ +#define DT_REL 17 /* address of rel. tbl. w addends */ +#define DT_RELSZ 18 /* size of DT_REL relocation table */ +#define DT_RELENT 19 /* size of DT_REL relocation entry */ +#define DT_PLTREL 20 /* PLT referenced relocation entry */ +#define DT_DEBUG 21 /* bugger */ +#define DT_TEXTREL 22 /* Allow rel. mod. to unwritable seg */ +#define DT_JMPREL 23 /* add. of PLT's relocation entries */ +#define DT_BIND_NOW 24 /* Bind now regardless of env setting */ +#define DT_NUM 25 /* Number used. */ +#define DT_LOPROC 0x70000000 /* reserved range for processor */ +#define DT_HIPROC 0x7fffffff /* specific dynamic array tags */ + +/* Standard ELF hashing function */ +unsigned int elf_hash(const unsigned char *name); /* - * Auxiliary Vectors + * Note Definitions */ typedef struct { - Elf32_Word a_type; /* 32-bit id */ - Elf32_Word a_v; /* 32-bit id */ -} Aux32Info; + Elf32_Word namesz; + Elf32_Word descsz; + Elf32_Word type; +} Elf32_Note; typedef struct { - Elf64_Word a_type; /* 32-bit id */ - Elf64_Xword a_v; /* 64-bit id */ -} Aux64Info; - -/* BEGIN android-changed: these constants should come from <linux/auxvec.h>. */ -#if 0 -/* a_type */ -#define AT_NULL 0 /* Marks end of array */ -#define AT_IGNORE 1 /* No meaning, a_un is undefined */ -#define AT_EXECFD 2 /* Open file descriptor of object file */ -#define AT_PHDR 3 /* &phdr[0] */ -#define AT_PHENT 4 /* sizeof(phdr[0]) */ -#define AT_PHNUM 5 /* # phdr entries */ -#define AT_PAGESZ 6 /* PAGESIZE */ -#define AT_BASE 7 /* Interpreter base addr */ -#define AT_FLAGS 8 /* Processor flags */ -#define AT_ENTRY 9 /* Entry address of executable */ -#define AT_DCACHEBSIZE 10 /* Data cache block size */ -#define AT_ICACHEBSIZE 11 /* Instruction cache block size */ -#define AT_UCACHEBSIZE 12 /* Unified cache block size */ -#define AT_STACKBASE 13 /* Base address of the main thread */ - - /* Vendor specific */ -#define AT_MIPS_NOTELF 10 /* XXX a_val != 0 -> MIPS XCOFF executable */ - -#define AT_EUID 2000 /* euid (solaris compatible numbers) */ -#define AT_RUID 2001 /* ruid (solaris compatible numbers) */ -#define AT_EGID 2002 /* egid (solaris compatible numbers) */ -#define AT_RGID 2003 /* rgid (solaris compatible numbers) */ - - /* Solaris kernel specific */ -#define AT_SUN_LDELF 2004 /* dynamic linker's ELF header */ -#define AT_SUN_LDSHDR 2005 /* dynamic linker's section header */ -#define AT_SUN_LDNAME 2006 /* dynamic linker's name */ -#define AT_SUN_LPGSIZE 2007 /* large pagesize */ - - /* Other information */ -#define AT_SUN_PLATFORM 2008 /* sysinfo(SI_PLATFORM) */ -#define AT_SUN_HWCAP 2009 /* process hardware capabilities */ -#define AT_SUN_IFLUSH 2010 /* do we need to flush the instruction cache? */ -#define AT_SUN_CPU 2011 /* CPU name */ - /* ibcs2 emulation band aid */ -#define AT_SUN_EMUL_ENTRY 2012 /* coff entry point */ -#define AT_SUN_EMUL_EXECFD 2013 /* coff file descriptor */ - /* Executable's fully resolved name */ -#define AT_SUN_EXECNAME 2014 -#endif -/* END android-changed */ + Elf64_Half namesz; + Elf64_Half descsz; + Elf64_Half type; +} Elf64_Note; /* - * Note Headers + * XXX - these _KERNEL items aren't part of the ABI! */ -typedef struct { - Elf32_Word n_namesz; - Elf32_Word n_descsz; - Elf32_Word n_type; -} Elf32_Nhdr; - -typedef struct { - Elf64_Word n_namesz; - Elf64_Word n_descsz; - Elf64_Word n_type; -} Elf64_Nhdr; +#if defined(_KERNEL) || defined(_DYN_LOADER) -#define ELF_NOTE_GNU_NAMESZ 4 -#define ELF_NOTE_GNU_NAME "GNU\0" +#define ELF32_NO_ADDR ((u_long) ~0) /* Indicates addr. not yet filled in */ +#define ELF_AUX_ENTRIES 8 /* Size of aux array passed to loader */ -/* - * GNU-specific note type: ABI tag - * name: GNU\0 - * namesz: 4 - * desc: - * word[0]: OS tag - * word[1]: major version - * word[2]: minor version - * word[3]: teeny version - * descsz: 16 - */ -/* GNU-specific note name and description sizes */ -#define ELF_NOTE_TYPE_ABI_TAG 1 -#define ELF_NOTE_ABI_NAME ELF_NOTE_GNU_NAME -#define ELF_NOTE_ABI_NAMESZ ELF_NOTE_GNU_NAMESZ -#define ELF_NOTE_ABI_DESCSZ 16 -/* GNU-specific OS/version value stuff */ -#define ELF_NOTE_ABI_OS_LINUX 0 -#define ELF_NOTE_ABI_OS_HURD 1 -#define ELF_NOTE_ABI_OS_SOLARIS 2 -#define ELF_NOTE_ABI_OS_KFREEBSD 3 -#define ELF_NOTE_ABI_OS_KNETBSD 4 - -/* - * GNU-specific note type: Hardware capabilities - * name: GNU\0 - * namesz: 4 - * desc: - * word[0]: Number of entries - * word[1]: Bitmask of enabled entries - * Followed by a byte id, and a NUL terminated string per entry - * descsz: variable - */ -#define ELF_NOTE_TYPE_GNU_HWCAP 2 - -/* - * GNU-specific note type: Build ID generated by ld - * name: GNU\0 - * desc: - * word[0..4] SHA1 [default] - * or - * word[0..3] md5 or uuid - * descsz: 16 or 20 - */ -#define ELF_NOTE_TYPE_GNU_BUILD_ID 3 +typedef struct { + Elf32_Sword au_id; /* 32-bit id */ + Elf32_Word au_v; /* 32-bit value */ +} Aux32Info; -/* SuSE-specific note type: ABI - * name: SuSE\0 - * namesz: 5 - * desc: - * half[0] = MMmm - * - * M = product major version - * m = product minor version - * descsz: 2 - */ -#define ELF_NOTE_TYPE_SUSE_TAG 1 -/* SuSE-specific note name and description sizes */ -#define ELF_NOTE_SUSE_NAMESZ 5 -#define ELF_NOTE_SUSE_DESCSZ 2 -/* SuSE-specific note name */ -#define ELF_NOTE_SUSE_NAME "SuSE\0" - -/* SuSE-specific note type: version - * name: SuSE\0\0\0\0 - * namesz: 8 - * desc: - * word[0] = VVTTMMmm - * - * V = version of following data - * T = product type: [box, sles, nld, whatever] - * M = product major version - * m = product minor version - * descsz: 8 - */ -#define ELF_NOTE_TYPE_SUSE_VERSION_TAG 0x45537553 /* SuSE in LE */ -/* SuSE-specific note name and description sizes */ -#define ELF_NOTE_SUSE_VERSION_NAMESZ 8 -#define ELF_NOTE_SUSE_VERSION_DESCSZ 8 -/* SuSE-specific note name */ -#define ELF_NOTE_SUSE_VERSION_NAME "SuSE\0\0\0\0" - -/* NetBSD-specific note type: Emulation name. - * name: NetBSD\0\0 - * namesz: 8 - * desc: - * word[0]: MMmmrrpp00 - * - * M = major version - * m = minor version - * r = release ["",A-Z,Z[A-Z] but numeric] - * p = patchlevel - * descsz: 4 - */ -#define ELF_NOTE_TYPE_NETBSD_TAG 1 -/* NetBSD-specific note name and description sizes */ -#define ELF_NOTE_NETBSD_NAMESZ 7 -#define ELF_NOTE_NETBSD_DESCSZ 4 -/* NetBSD-specific note name */ -#define ELF_NOTE_NETBSD_NAME "NetBSD\0\0" - -/* NetBSD-specific note type: Checksum. - * There should be 1 NOTE per PT_LOAD section. - * name: ??? - * namesz: ??? - * desc: - * a tuple of <phnum>(16),<chk-type>(16),<chk-value>. - * descsz: ??? - */ -#define ELF_NOTE_TYPE_CHECKSUM_TAG 2 -#define ELF_NOTE_CHECKSUM_CRC32 1 -#define ELF_NOTE_CHECKSUM_MD5 2 -#define ELF_NOTE_CHECKSUM_SHA1 3 -#define ELF_NOTE_CHECKSUM_SHA256 4 +#define ELF64_NO_ADDR ((__uint64_t) ~0)/* Indicates addr. not yet filled in */ +#define ELF64_AUX_ENTRIES 8 /* Size of aux array passed to loader */ -/* - * NetBSD-specific note type: PaX. - * There should be 1 NOTE per executable. - * name: PaX\0 - * namesz: 4 - * desc: - * word[0]: capability bitmask - * descsz: 4 - */ -#define ELF_NOTE_TYPE_PAX_TAG 3 -#define ELF_NOTE_PAX_MPROTECT 0x01 /* Force enable Mprotect */ -#define ELF_NOTE_PAX_NOMPROTECT 0x02 /* Force disable Mprotect */ -#define ELF_NOTE_PAX_GUARD 0x04 /* Force enable Segvguard */ -#define ELF_NOTE_PAX_NOGUARD 0x08 /* Force disable Servguard */ -#define ELF_NOTE_PAX_ASLR 0x10 /* Force enable ASLR */ -#define ELF_NOTE_PAX_NOASLR 0x20 /* Force disable ASLR */ -#define ELF_NOTE_PAX_NAMESZ 4 -#define ELF_NOTE_PAX_NAME "PaX\0" -#define ELF_NOTE_PAX_DESCSZ 4 +typedef struct { + Elf64_Shalf au_id; /* 32-bit id */ + Elf64_Xword au_v; /* 64-bit id */ +} Aux64Info; -/* - * NetBSD-specific core file information. - * - * NetBSD ELF core files use notes to provide information about - * the process's state. The note name is "NetBSD-CORE" for - * information that is global to the process, and "NetBSD-CORE@nn", - * where "nn" is the lwpid of the LWP that the information belongs - * to (such as register state). - * - * We use the following note identifiers: - * - * ELF_NOTE_NETBSD_CORE_PROCINFO - * Note is a "netbsd_elfcore_procinfo" structure. - * - * We also use ptrace(2) request numbers (the ones that exist in - * machine-dependent space) to identify register info notes. The - * info in such notes is in the same format that ptrace(2) would - * export that information. - * - * Please try to keep the members of this structure nicely aligned, - * and if you add elements, add them to the end and bump the version. - */ +enum AuxID { + AUX_null = 0, + AUX_ignore = 1, + AUX_execfd = 2, + AUX_phdr = 3, /* &phdr[0] */ + AUX_phent = 4, /* sizeof(phdr[0]) */ + AUX_phnum = 5, /* # phdr entries */ + AUX_pagesz = 6, /* PAGESIZE */ + AUX_base = 7, /* ld.so base addr */ + AUX_flags = 8, /* processor flags */ + AUX_entry = 9, /* a.out entry */ + AUX_sun_uid = 2000, /* euid */ + AUX_sun_ruid = 2001, /* ruid */ + AUX_sun_gid = 2002, /* egid */ + AUX_sun_rgid = 2003 /* rgid */ +}; -#define ELF_NOTE_NETBSD_CORE_NAME "NetBSD-CORE" - -#define ELF_NOTE_NETBSD_CORE_PROCINFO 1 - -#define NETBSD_ELFCORE_PROCINFO_VERSION 1 - -struct netbsd_elfcore_procinfo { - /* Version 1 fields start here. */ - uint32_t cpi_version; /* our version */ - uint32_t cpi_cpisize; /* sizeof(this struct) */ - uint32_t cpi_signo; /* killing signal */ - uint32_t cpi_sigcode; /* signal code */ - uint32_t cpi_sigpend[4]; /* pending signals */ - uint32_t cpi_sigmask[4]; /* blocked signals */ - uint32_t cpi_sigignore[4]; /* ignored signals */ - uint32_t cpi_sigcatch[4]; /* caught signals */ - int32_t cpi_pid; /* process ID */ - int32_t cpi_ppid; /* parent process ID */ - int32_t cpi_pgrp; /* process group ID */ - int32_t cpi_sid; /* session ID */ - uint32_t cpi_ruid; /* real user ID */ - uint32_t cpi_euid; /* effective user ID */ - uint32_t cpi_svuid; /* saved user ID */ - uint32_t cpi_rgid; /* real group ID */ - uint32_t cpi_egid; /* effective group ID */ - uint32_t cpi_svgid; /* saved group ID */ - uint32_t cpi_nlwps; /* number of LWPs */ - int8_t cpi_name[32]; /* copy of p->p_comm */ - /* Add version 2 fields below here. */ - int32_t cpi_siglwp; /* LWP target of killing signal */ +struct elf_args { + u_long arg_entry; /* program entry point */ + u_long arg_interp; /* Interpreter load address */ + u_long arg_phaddr; /* program header address */ + u_long arg_phentsize; /* Size of program header */ + u_long arg_phnum; /* Number of program headers */ + u_long arg_os; /* OS tag */ }; -/* - * NetBSD-specific note type: MACHINE_ARCH. - * There should be 1 NOTE per executable. - * name: NetBSD\0 - * namesz: 7 - * desc: string - * descsz: variable - */ -#define ELF_NOTE_TYPE_MARCH_TAG 5 -/* NetBSD-specific note name and description sizes */ -#define ELF_NOTE_MARCH_NAMESZ ELF_NOTE_NETBSD_NAMESZ -/* NetBSD-specific note name */ -#define ELF_NOTE_MARCH_NAME ELF_NOTE_NETBSD_NAME +#endif #if !defined(ELFSIZE) && defined(ARCH_ELFSIZE) #define ELFSIZE ARCH_ELFSIZE @@ -1025,25 +546,25 @@ struct netbsd_elfcore_procinfo { #define Elf_Shdr Elf32_Shdr #define Elf_Sym Elf32_Sym #define Elf_Rel Elf32_Rel -#define Elf_Rela Elf32_Rela +#define Elf_RelA Elf32_Rela #define Elf_Dyn Elf32_Dyn +#define Elf_Half Elf32_Half #define Elf_Word Elf32_Word #define Elf_Sword Elf32_Sword -#define Elf_Half Elf32_Half #define Elf_Addr Elf32_Addr #define Elf_Off Elf32_Off -#define Elf_SOff Elf32_SOff #define Elf_Nhdr Elf32_Nhdr -#define Elf_Verdef Elf32_Verdef -#define Elf_Verdaux Elf32_Verdaux -#define Elf_Verneed Elf32_Verneed -#define Elf_Vernaux Elf32_Vernaux -#define Elf_Versym Elf32_Versym +#define Elf_Note Elf32_Note #define ELF_R_SYM ELF32_R_SYM #define ELF_R_TYPE ELF32_R_TYPE +#define ELF_R_INFO ELF32_R_INFO #define ELFCLASS ELFCLASS32 +#define ELF_ST_BIND ELF32_ST_BIND +#define ELF_ST_TYPE ELF32_ST_TYPE +#define ELF_ST_INFO ELF32_ST_INFO + #define AuxInfo Aux32Info #elif defined(ELFSIZE) && (ELFSIZE == 64) #define Elf_Ehdr Elf64_Ehdr @@ -1051,237 +572,54 @@ struct netbsd_elfcore_procinfo { #define Elf_Shdr Elf64_Shdr #define Elf_Sym Elf64_Sym #define Elf_Rel Elf64_Rel -#define Elf_Rela Elf64_Rela +#define Elf_RelA Elf64_Rela #define Elf_Dyn Elf64_Dyn +#define Elf_Half Elf64_Half #define Elf_Word Elf64_Word #define Elf_Sword Elf64_Sword -#define Elf_Half Elf64_Half #define Elf_Addr Elf64_Addr #define Elf_Off Elf64_Off -#define Elf_SOff Elf64_SOff #define Elf_Nhdr Elf64_Nhdr -#define Elf_Verdef Elf64_Verdef -#define Elf_Verdaux Elf64_Verdaux -#define Elf_Verneed Elf64_Verneed -#define Elf_Vernaux Elf64_Vernaux -#define Elf_Versym Elf64_Versym +#define Elf_Note Elf64_Note #define ELF_R_SYM ELF64_R_SYM #define ELF_R_TYPE ELF64_R_TYPE +#define ELF_R_INFO ELF64_R_INFO #define ELFCLASS ELFCLASS64 -#define AuxInfo Aux64Info -#endif - -#ifndef Elf_Symindx -#define Elf_Symindx uint32_t -#endif - -#define ELF32_ST_BIND(info) ELF_ST_BIND(info) -#define ELF32_ST_TYPE(info) ELF_ST_TYPE(info) -#define ELF32_ST_INFO(bind,type) ELF_ST_INFO(bind,type) -#define ELF32_ST_VISIBILITY(other) ELF_ST_VISIBILITY(other) - -#define ELF64_ST_BIND(info) ELF_ST_BIND(info) -#define ELF64_ST_TYPE(info) ELF_ST_TYPE(info) -#define ELF64_ST_INFO(bind,type) ELF_ST_INFO(bind,type) -#define ELF64_ST_VISIBILITY(other) ELF_ST_VISIBILITY(other) - -typedef struct { - Elf32_Half si_boundto; /* direct bindings - symbol bound to */ - Elf32_Half si_flags; /* per symbol flags */ -} Elf32_Syminfo; +#define ELF_ST_BIND ELF64_ST_BIND +#define ELF_ST_TYPE ELF64_ST_TYPE +#define ELF_ST_INFO ELF64_ST_INFO -typedef struct { - Elf64_Word si_boundto; /* direct bindings - symbol bound to */ - Elf64_Word si_flags; /* per symbol flags */ -} Elf64_Syminfo; - -#define SYMINFO_FLG_DIRECT 0x0001 /* symbol ref has direct association - to object containing definition */ -#define SYMINFO_FLG_PASSTHRU 0x0002 /* ignored - see SYMINFO_FLG_FILTER */ -#define SYMINFO_FLG_COPY 0x0004 /* symbol is a copy-reloc */ -#define SYMINFO_FLG_LAZYLOAD 0x0008 /* object containing defn should be - lazily-loaded */ -#define SYMINFO_FLG_DIRECTBIND 0x0010 /* ref should be bound directly to - object containing definition */ -#define SYMINFO_FLG_NOEXTDIRECT 0x0020 /* don't let an external reference - directly bind to this symbol */ -#define SYMINFO_FLG_FILTER 0x0002 /* symbol ref is associated to a */ -#define SYMINFO_FLG_AUXILIARY 0x0040 /* standard or auxiliary filter */ - -#define SYMINFO_BT_SELF 0xffff /* symbol bound to self */ -#define SYMINFO_BT_PARENT 0xfffe /* symbol bound to parent */ -#define SYMINFO_BT_NONE 0xfffd /* no special symbol binding */ -#define SYMINFO_BT_EXTERN 0xfffc /* symbol defined as external */ -#define SYMINFO_BT_LOWRESERVE 0xff00 /* beginning of reserved entries */ - -#define SYMINFO_NONE 0 /* Syminfo version */ -#define SYMINFO_CURRENT 1 -#define SYMINFO_NUM 2 - -/* - * These constants are used for Elf32_Verdef struct's version number. - */ -#define VER_DEF_NONE 0 -#define VER_DEF_CURRENT 1 - -/* - * These constants are used for Elf32_Verdef struct's vd_ndx. - */ -#define VER_DEF_IDX(x) VER_NDX(x) - -/* - * These constants are used for Elf32_Verdef struct's vd_flags. - */ -#define VER_FLG_BASE 0x1 -#define VER_FLG_WEAK 0x2 - -/* - * These are used in an Elf32_Versym field. - */ -#define VER_NDX_LOCAL 0 -#define VER_NDX_GLOBAL 1 -#define VER_NDX_GIVEN 2 - -/* - * These constants are used for Elf32_Verneed struct's version number. - */ -#define VER_NEED_NONE 0 -#define VER_NEED_CURRENT 1 - -/* - * These constants are used for Elf32_Vernaux struct's vna_other. - */ -#define VER_NEED_HIDDEN VER_NDX_HIDDEN -#define VER_NEED_IDX(x) VER_NDX(x) - -/* index */ -#define VER_NDX_HIDDEN 0x8000 -#define VER_NDX(x) ((x) & ~VER_NDX_HIDDEN) - -/* - * GNU Extension hidding symbol - */ -#define VERSYM_HIDDEN 0x8000 -#define VERSYM_VERSION 0x7fff - -#define ELF_VER_CHR '@' - -/* - * These are current size independent. - */ - -typedef struct { - Elf32_Half vd_version; /* version number of structure */ - Elf32_Half vd_flags; /* flags (VER_FLG_*) */ - Elf32_Half vd_ndx; /* version index */ - Elf32_Half vd_cnt; /* number of verdaux entries */ - Elf32_Word vd_hash; /* hash of name */ - Elf32_Word vd_aux; /* offset to verdaux entries */ - Elf32_Word vd_next; /* offset to next verdef */ -} Elf32_Verdef; -typedef Elf32_Verdef Elf64_Verdef; - -typedef struct { - Elf32_Word vda_name; /* string table offset of name */ - Elf32_Word vda_next; /* offset to verdaux */ -} Elf32_Verdaux; -typedef Elf32_Verdaux Elf64_Verdaux; - -typedef struct { - Elf32_Half vn_version; /* version number of structure */ - Elf32_Half vn_cnt; /* number of vernaux entries */ - Elf32_Word vn_file; /* string table offset of library name*/ - Elf32_Word vn_aux; /* offset to vernaux entries */ - Elf32_Word vn_next; /* offset to next verneed */ -} Elf32_Verneed; -typedef Elf32_Verneed Elf64_Verneed; - -typedef struct { - Elf32_Word vna_hash; /* Hash of dependency name */ - Elf32_Half vna_flags; /* flags (VER_FLG_*) */ - Elf32_Half vna_other; /* unused */ - Elf32_Word vna_name; /* string table offset to version name*/ - Elf32_Word vna_next; /* offset to next vernaux */ -} Elf32_Vernaux; -typedef Elf32_Vernaux Elf64_Vernaux; - -typedef struct { - Elf32_Half vs_vers; -} Elf32_Versym; -typedef Elf32_Versym Elf64_Versym; - -#ifdef _KERNEL - -#define ELF_AUX_ENTRIES 15 /* Max size of aux array passed to loader */ -#define ELF32_NO_ADDR (~(Elf32_Addr)0) /* Indicates addr. not yet filled in */ -#define ELF32_LINK_ADDR ((Elf32_Addr)-2) /* advises to use link address */ -#define ELF64_NO_ADDR (~(Elf64_Addr)0) /* Indicates addr. not yet filled in */ -#define ELF64_LINK_ADDR ((Elf64_Addr)-2) /* advises to use link address */ - -#if defined(ELFSIZE) && (ELFSIZE == 64) -#define ELF_NO_ADDR ELF64_NO_ADDR -#define ELF_LINK_ADDR ELF64_LINK_ADDR -#elif defined(ELFSIZE) && (ELFSIZE == 32) -#define ELF_NO_ADDR ELF32_NO_ADDR -#define ELF_LINK_ADDR ELF32_LINK_ADDR -#endif - -#ifndef ELF32_EHDR_FLAGS_OK -#define ELF32_EHDR_FLAGS_OK(eh) 1 -#endif - -#ifndef ELF64_EHDR_FLAGS_OK -#define ELF64_EHDR_FLAGS_OK(eh) 1 -#endif - -#if defined(ELFSIZE) && (ELFSIZE == 64) -#define ELF_EHDR_FLAGS_OK(eh) ELF64_EHDR_FLAGS_OK(eh) -#else -#define ELF_EHDR_FLAGS_OK(eh) ELF32_EHDR_FLAGS_OK(eh) -#endif - -#if defined(ELFSIZE) -struct elf_args { - Elf_Addr arg_entry; /* program entry point */ - Elf_Addr arg_interp; /* Interpreter load address */ - Elf_Addr arg_phaddr; /* program header address */ - Elf_Addr arg_phentsize; /* Size of program header */ - Elf_Addr arg_phnum; /* Number of program headers */ -}; +#define AuxInfo Aux64Info #endif -#ifdef _KERNEL_OPT -#include "opt_execfmt.h" +#ifndef _KERNEL +extern Elf_Dyn _DYNAMIC[]; #endif -struct ps_strings; - -#ifdef EXEC_ELF32 -int exec_elf32_makecmds(struct lwp *, struct exec_package *); -int elf32_copyargs(struct lwp *, struct exec_package *, - struct ps_strings *, char **, void *); - -int coredump_elf32(struct lwp *, void *); -int coredump_writenote_elf32(struct proc *, void *, Elf32_Nhdr *, - const char *, void *); - -int elf32_check_header(Elf32_Ehdr *, int); +#ifdef _KERNEL +#ifdef _KERN_DO_ELF64 +int exec_elf64_makecmds(struct proc *, struct exec_package *); +void *elf64_copyargs(struct exec_package *, struct ps_strings *, + void *, void *); +int exec_elf64_fixup(struct proc *, struct exec_package *); +char *elf64_check_brand(Elf64_Ehdr *); +int elf64_os_pt_note(struct proc *, struct exec_package *, Elf64_Ehdr *, + char *, size_t, size_t); #endif - -#ifdef EXEC_ELF64 -int exec_elf64_makecmds(struct lwp *, struct exec_package *); -int elf64_copyargs(struct lwp *, struct exec_package *, - struct ps_strings *, char **, void *); - -int coredump_elf64(struct lwp *, void *); -int coredump_writenote_elf64(struct proc *, void *, Elf64_Nhdr *, - const char *, void *); - -int elf64_check_header(Elf64_Ehdr *, int); +#ifdef _KERN_DO_ELF +int exec_elf32_makecmds(struct proc *, struct exec_package *); +void *elf32_copyargs(struct exec_package *, struct ps_strings *, + void *, void *); +int exec_elf32_fixup(struct proc *, struct exec_package *); +char *elf32_check_brand(Elf32_Ehdr *); +int elf32_os_pt_note(struct proc *, struct exec_package *, Elf32_Ehdr *, + char *, size_t, size_t); #endif #endif /* _KERNEL */ -#endif /* !_SYS_EXEC_ELF_H_ */ +#define ELF_TARG_VER 1 /* The ver for which this code is intended */ + +#endif /* _SYS_EXEC_ELF_H_ */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/klog.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/klog.h index 02851d2..acfaa20 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/klog.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/klog.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_KLOG_H_ #define _SYS_KLOG_H_ @@ -45,13 +46,6 @@ __BEGIN_DECLS #define KLOG_SIZE_UNREAD 9 #define KLOG_SIZE_BUFFER 10 -/* These are deprecated names that were used in earlier bionic releases. Do not use. */ -#define KLOG_DISABLE 6 -#define KLOG_ENABLE 7 -#define KLOG_SETLEVEL 8 -#define KLOG_UNREADSIZE 9 -#define KLOG_WRITE 10 - extern int klogctl(int, char *, int); __END_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/mman.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/mman.h index 7c5f8d7..5a8c985 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/mman.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/mman.h @@ -31,7 +31,6 @@ #include <sys/cdefs.h> #include <sys/types.h> #include <asm/mman.h> -#include <asm/page.h> __BEGIN_DECLS @@ -44,23 +43,23 @@ __BEGIN_DECLS #define MREMAP_MAYMOVE 1 #define MREMAP_FIXED 2 -extern void* mmap(void *, size_t, int, int, int, off_t); -extern void* mmap64(void *, size_t, int, int, int, off64_t); -extern int munmap(void *, size_t); -extern int msync(const void *, size_t, int); -extern int mprotect(const void *, size_t, int); -extern void* mremap(void *, size_t, size_t, unsigned long); +extern void* mmap(void*, size_t, int, int, int, off_t); +extern void* mmap64(void*, size_t, int, int, int, off64_t); +extern int munmap(void*, size_t); +extern int msync(const void*, size_t, int); +extern int mprotect(const void*, size_t, int); +extern void* mremap(void*, size_t, size_t, unsigned long); -extern int mlockall(int); -extern int munlockall(void); -extern int mlock(const void *, size_t); -extern int munlock(const void *, size_t); -extern int madvise(const void *, size_t, int); +extern int mlockall(int); +extern int munlockall(void); +extern int mlock(const void*, size_t); +extern int munlock(const void*, size_t); +extern int madvise(const void*, size_t, int); -extern int mlock(const void *addr, size_t len); -extern int munlock(const void *addr, size_t len); +extern int mlock(const void*, size_t); +extern int munlock(const void*, size_t); -extern int mincore(void* start, size_t length, unsigned char* vec); +extern int mincore(void*, size_t, unsigned char*); __END_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/socket.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/socket.h index 32d98ea..62a5300 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/socket.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/socket.h @@ -43,8 +43,9 @@ __BEGIN_DECLS #define sockaddr_storage __kernel_sockaddr_storage -typedef __sa_family_t sa_family_t; -typedef int socklen_t; +typedef unsigned short sa_family_t; + +struct timespec; #ifdef __mips__ #define SOCK_DGRAM 1 @@ -76,40 +77,45 @@ enum { }; struct sockaddr { - sa_family_t sa_family; - char sa_data[14]; + sa_family_t sa_family; + char sa_data[14]; }; struct linger { - int l_onoff; - int l_linger; + int l_onoff; + int l_linger; }; struct msghdr { - void * msg_name; - int msg_namelen; - struct iovec * msg_iov; - __kernel_size_t msg_iovlen; - void * msg_control; - __kernel_size_t msg_controllen; - unsigned msg_flags; + void* msg_name; + socklen_t msg_namelen; + struct iovec* msg_iov; + size_t msg_iovlen; + void* msg_control; + size_t msg_controllen; + int msg_flags; +}; + +struct mmsghdr { + struct msghdr msg_hdr; + unsigned int msg_len; }; struct cmsghdr { - __kernel_size_t cmsg_len; - int cmsg_level; - int cmsg_type; + size_t cmsg_len; + int cmsg_level; + int cmsg_type; }; #define __CMSG_NXTHDR(ctl, len, cmsg) __cmsg_nxthdr((ctl),(len),(cmsg)) #define CMSG_NXTHDR(mhdr, cmsg) cmsg_nxthdr((mhdr), (cmsg)) #define CMSG_ALIGN(len) ( ((len)+sizeof(long)-1) & ~(sizeof(long)-1) ) -#define CMSG_DATA(cmsg) ((void *)((char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) +#define CMSG_DATA(cmsg) ((void*)((char*)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)))) #define CMSG_SPACE(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(len)) #define CMSG_LEN(len) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (len)) -#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? (struct cmsghdr *)(ctl) : (struct cmsghdr *)NULL) +#define __CMSG_FIRSTHDR(ctl,len) ((len) >= sizeof(struct cmsghdr) ? (struct cmsghdr*)(ctl) : (struct cmsghdr*)NULL) #define CMSG_FIRSTHDR(msg) __CMSG_FIRSTHDR((msg)->msg_control, (msg)->msg_controllen) -#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && (cmsg)->cmsg_len <= (unsigned long) ((mhdr)->msg_controllen - ((char *)(cmsg) - (char *)(mhdr)->msg_control))) +#define CMSG_OK(mhdr, cmsg) ((cmsg)->cmsg_len >= sizeof(struct cmsghdr) && (cmsg)->cmsg_len <= (unsigned long) ((mhdr)->msg_controllen - ((char*)(cmsg) - (char*)(mhdr)->msg_control))) #ifdef __GNUC__ #define __KINLINE static __inline__ @@ -119,16 +125,17 @@ struct cmsghdr { #define __KINLINE static #endif -__KINLINE struct cmsghdr * __cmsg_nxthdr(void *__ctl, __kernel_size_t __size, struct cmsghdr *__cmsg) { - struct cmsghdr * __ptr; - __ptr = (struct cmsghdr*)(((unsigned char *) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len)); - if ((unsigned long)((char*)(__ptr+1) - (char *) __ctl) > __size) - return (struct cmsghdr *)0; - return __ptr; +__KINLINE struct cmsghdr* __cmsg_nxthdr(void* __ctl, size_t __size, struct cmsghdr* __cmsg) { + struct cmsghdr* __ptr; + __ptr = (struct cmsghdr*)(((unsigned char*) __cmsg) + CMSG_ALIGN(__cmsg->cmsg_len)); + if ((unsigned long)((char*)(__ptr+1) - (char*) __ctl) > __size) { + return NULL; + } + return __ptr; } -__KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__cmsg) { - return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); +__KINLINE struct cmsghdr* cmsg_nxthdr (struct msghdr* __msg, struct cmsghdr* __cmsg) { + return __cmsg_nxthdr(__msg->msg_control, __msg->msg_controllen, __cmsg); } #define SCM_RIGHTS 0x01 @@ -136,9 +143,9 @@ __KINLINE struct cmsghdr * cmsg_nxthdr (struct msghdr *__msg, struct cmsghdr *__ #define SCM_SECURITY 0x03 struct ucred { - __u32 pid; - __u32 uid; - __u32 gid; + pid_t pid; + uid_t uid; + gid_t gid; }; #define AF_UNSPEC 0 @@ -242,6 +249,9 @@ struct ucred { #define MSG_ERRQUEUE 0x2000 #define MSG_NOSIGNAL 0x4000 #define MSG_MORE 0x8000 +#define MSG_WAITFORONE 0x10000 +#define MSG_FASTOPEN 0x20000000 +#define MSG_CMSG_CLOEXEC 0x40000000 #define MSG_EOF MSG_FIN #define MSG_CMSG_COMPAT 0 @@ -277,43 +287,45 @@ struct ucred { # define __socketcall extern #endif -__socketcall int socket(int, int, int); -__socketcall int bind(int, const struct sockaddr *, int); -__socketcall int connect(int, const struct sockaddr *, socklen_t); +__socketcall int accept(int, struct sockaddr*, socklen_t*); +__socketcall int bind(int, const struct sockaddr*, int); +__socketcall int connect(int, const struct sockaddr*, socklen_t); +__socketcall int getpeername(int, struct sockaddr*, socklen_t*); +__socketcall int getsockname(int, struct sockaddr*, socklen_t*); +__socketcall int getsockopt(int, int, int, void*, socklen_t*); __socketcall int listen(int, int); -__socketcall int accept(int, struct sockaddr *, socklen_t *); -__socketcall int getsockname(int, struct sockaddr *, socklen_t *); -__socketcall int getpeername(int, struct sockaddr *, socklen_t *); -__socketcall int socketpair(int, int, int, int *); +__socketcall int recvmmsg(int, struct mmsghdr*, unsigned int, int, const struct timespec*); +__socketcall int recvmsg(int, struct msghdr*, int); +__socketcall int sendmmsg(int, const struct mmsghdr*, unsigned int, int); +__socketcall int sendmsg(int, const struct msghdr*, int); +__socketcall int setsockopt(int, int, int, const void*, socklen_t); __socketcall int shutdown(int, int); -__socketcall int setsockopt(int, int, int, const void *, socklen_t); -__socketcall int getsockopt(int, int, int, void *, socklen_t *); -__socketcall int sendmsg(int, const struct msghdr *, unsigned int); -__socketcall int recvmsg(int, struct msghdr *, unsigned int); +__socketcall int socket(int, int, int); +__socketcall int socketpair(int, int, int, int*); -extern ssize_t send(int, const void *, size_t, unsigned int); -extern ssize_t recv(int, void *, size_t, unsigned int); +extern ssize_t send(int, const void*, size_t, int); +extern ssize_t recv(int, void*, size_t, int); -__socketcall ssize_t sendto(int, const void *, size_t, int, const struct sockaddr *, socklen_t); -__socketcall ssize_t recvfrom(int, void *, size_t, unsigned int, const struct sockaddr *, socklen_t *); +__socketcall ssize_t sendto(int, const void*, size_t, int, const struct sockaddr*, socklen_t); +__socketcall ssize_t recvfrom(int, void*, size_t, int, const struct sockaddr*, socklen_t*); #if defined(__BIONIC_FORTIFY) __errordecl(__recvfrom_error, "recvfrom called with size bigger than buffer"); -extern ssize_t __recvfrom_chk(int, void*, size_t, size_t, unsigned int, const struct sockaddr*, socklen_t *); -extern ssize_t __recvfrom_real(int, void *, size_t, unsigned int, const struct sockaddr*, socklen_t*) +extern ssize_t __recvfrom_chk(int, void*, size_t, size_t, int, const struct sockaddr*, socklen_t*); +extern ssize_t __recvfrom_real(int, void*, size_t, int, const struct sockaddr*, socklen_t*) __asm__(__USER_LABEL_PREFIX__ "recvfrom"); __BIONIC_FORTIFY_INLINE -ssize_t recvfrom(int fd, void* buf, size_t len, unsigned int flags, const struct sockaddr* src_addr, socklen_t* addrlen) { +ssize_t recvfrom(int fd, void* buf, size_t len, int flags, const struct sockaddr* src_addr, socklen_t* addr_len) { size_t bos = __bos0(buf); #if !defined(__clang__) if (bos == __BIONIC_FORTIFY_UNKNOWN_SIZE) { - return __recvfrom_real(fd, buf, len, flags, src_addr, addrlen); + return __recvfrom_real(fd, buf, len, flags, src_addr, addr_len); } if (__builtin_constant_p(len) && (len <= bos)) { - return __recvfrom_real(fd, buf, len, flags, src_addr, addrlen); + return __recvfrom_real(fd, buf, len, flags, src_addr, addr_len); } if (__builtin_constant_p(len) && (len > bos)) { @@ -321,12 +333,12 @@ ssize_t recvfrom(int fd, void* buf, size_t len, unsigned int flags, const struct } #endif - return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addrlen); + return __recvfrom_chk(fd, buf, len, bos, flags, src_addr, addr_len); } __BIONIC_FORTIFY_INLINE -ssize_t recv(int socket, void *buf, size_t buflen, unsigned int flags) { - return recvfrom(socket, buf, buflen, flags, NULL, 0); +ssize_t recv(int socket, void* buf, size_t len, int flags) { + return recvfrom(socket, buf, len, flags, NULL, 0); } #endif /* __BIONIC_FORTIFY */ diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/stat.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/stat.h index 37b8dc2..e62e76d 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/stat.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/stat.h @@ -38,101 +38,101 @@ __BEGIN_DECLS #if defined(__aarch64__) -struct stat { - unsigned long st_dev; - unsigned long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned long st_rdev; - unsigned long __pad1; - long st_size; - int st_blksize; - int __pad2; - long st_blocks; - long st_atime; - unsigned long st_atime_nsec; - long st_mtime; - unsigned long st_mtime_nsec; - long st_ctime; - unsigned long st_ctime_nsec; - unsigned int __unused4; - unsigned int __unused5; -}; +#define __STAT64_BODY \ + unsigned long st_dev; \ + unsigned long st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned long st_rdev; \ + unsigned long __pad1; \ + long st_size; \ + int st_blksize; \ + int __pad2; \ + long st_blocks; \ + long st_atime; \ + unsigned long st_atime_nsec; \ + long st_mtime; \ + unsigned long st_mtime_nsec; \ + long st_ctime; \ + unsigned long st_ctime_nsec; \ + unsigned int __unused4; \ + unsigned int __unused5; \ + #elif defined(__mips__) -struct stat { - unsigned int st_dev; - unsigned int __pad0[3]; - unsigned long long st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned int st_uid; - unsigned int st_gid; - unsigned int st_rdev; - unsigned int __pad1[3]; - long long st_size; - unsigned int st_atime; - unsigned int st_atime_nsec; - unsigned int st_mtime; - unsigned int st_mtime_nsec; - unsigned int st_ctime; - unsigned int st_ctime_nsec; - unsigned int st_blksize; - unsigned int __pad2; - unsigned long long st_blocks; -}; +#define __STAT64_BODY \ + unsigned int st_dev; \ + unsigned int __pad0[3]; \ + unsigned long long st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned int st_rdev; \ + unsigned int __pad1[3]; \ + long long st_size; \ + unsigned int st_atime; \ + unsigned int st_atime_nsec; \ + unsigned int st_mtime; \ + unsigned int st_mtime_nsec; \ + unsigned int st_ctime; \ + unsigned int st_ctime_nsec; \ + unsigned int st_blksize; \ + unsigned int __pad2; \ + unsigned long long st_blocks; \ + #elif defined(__x86_64__) -struct stat { - unsigned long st_dev; - unsigned long st_ino; - unsigned long st_nlink; - unsigned int st_mode; - unsigned int st_uid; - unsigned int st_gid; - unsigned int __pad0; - unsigned long st_rdev; - long st_size; - long st_blksize; - long st_blocks; - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; - unsigned long st_mtime_nsec; - unsigned long st_ctime; - unsigned long st_ctime_nsec; - long __pad3[3]; -}; +#define __STAT64_BODY \ + unsigned long st_dev; \ + unsigned long st_ino; \ + unsigned long st_nlink; \ + unsigned int st_mode; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned int __pad0; \ + unsigned long st_rdev; \ + long st_size; \ + long st_blksize; \ + long st_blocks; \ + unsigned long st_atime; \ + unsigned long st_atime_nsec; \ + unsigned long st_mtime; \ + unsigned long st_mtime_nsec; \ + unsigned long st_ctime; \ + unsigned long st_ctime_nsec; \ + long __pad3[3]; \ + #else -struct stat { - unsigned long long st_dev; - unsigned char __pad0[4]; - unsigned long __st_ino; - unsigned int st_mode; - unsigned int st_nlink; - unsigned long st_uid; - unsigned long st_gid; - unsigned long long st_rdev; - unsigned char __pad3[4]; - long long st_size; - unsigned long st_blksize; - unsigned long long st_blocks; - unsigned long st_atime; - unsigned long st_atime_nsec; - unsigned long st_mtime; - unsigned long st_mtime_nsec; - unsigned long st_ctime; - unsigned long st_ctime_nsec; - unsigned long long st_ino; -}; +#define __STAT64_BODY \ + unsigned long long st_dev; \ + unsigned char __pad0[4]; \ + unsigned long __st_ino; \ + unsigned int st_mode; \ + unsigned int st_nlink; \ + uid_t st_uid; \ + gid_t st_gid; \ + unsigned long long st_rdev; \ + unsigned char __pad3[4]; \ + long long st_size; \ + unsigned long st_blksize; \ + unsigned long long st_blocks; \ + unsigned long st_atime; \ + unsigned long st_atime_nsec; \ + unsigned long st_mtime; \ + unsigned long st_mtime_nsec; \ + unsigned long st_ctime; \ + unsigned long st_ctime_nsec; \ + unsigned long long st_ino; \ + #endif -/* For compatibility with GLibc, we provide macro aliases - * for the non-Posix nano-seconds accessors. - */ -#define st_atimensec st_atime_nsec -#define st_mtimensec st_mtime_nsec -#define st_ctimensec st_ctime_nsec +struct stat { __STAT64_BODY }; +struct stat64 { __STAT64_BODY }; + +#define st_atimensec st_atime_nsec +#define st_mtimensec st_mtime_nsec +#define st_ctimensec st_ctime_nsec #ifdef __USE_BSD /* Permission macros provided by glibc for compatibility with BSDs. */ @@ -141,21 +141,26 @@ struct stat { #define DEFFILEMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) /* 0666 */ #endif -extern int chmod(const char *, mode_t); -extern int fchmod(int, mode_t); -extern int mkdir(const char *, mode_t); +extern int chmod(const char*, mode_t); +extern int fchmod(int, mode_t); +extern int mkdir(const char*, mode_t); -extern int stat(const char *, struct stat *); -extern int fstat(int, struct stat *); -extern int lstat(const char *, struct stat *); -extern int mknod(const char *, mode_t, dev_t); +extern int fstat(int, struct stat*); +extern int fstat64(int, struct stat64*); +extern int fstatat(int, const char*, struct stat*, int); +extern int fstatat64(int, const char*, struct stat64*, int); +extern int lstat(const char*, struct stat*); +extern int lstat64(const char*, struct stat64*); +extern int stat(const char*, struct stat*); +extern int stat64(const char*, struct stat64*); + +extern int mknod(const char*, mode_t, dev_t); extern mode_t umask(mode_t); #if defined(__BIONIC_FORTIFY) extern mode_t __umask_chk(mode_t); -extern mode_t __umask_real(mode_t) - __asm__(__USER_LABEL_PREFIX__ "umask"); +extern mode_t __umask_real(mode_t) __asm__(__USER_LABEL_PREFIX__ "umask"); __errordecl(__umask_invalid_mode, "umask called with invalid mode"); __BIONIC_FORTIFY_INLINE @@ -172,20 +177,14 @@ mode_t umask(mode_t mode) { } #endif /* defined(__BIONIC_FORTIFY) */ - -#define stat64 stat -#define fstat64 fstat -#define lstat64 lstat - extern int mkfifo(const char*, mode_t); extern int fchmodat(int, const char*, mode_t, int); -extern int fstatat(int, const char*, struct stat*, int); extern int mkdirat(int, const char*, mode_t); extern int mknodat(int, const char*, mode_t, dev_t); -# define UTIME_NOW ((1l << 30) - 1l) -# define UTIME_OMIT ((1l << 30) - 2l) +#define UTIME_NOW ((1L << 30) - 1L) +#define UTIME_OMIT ((1L << 30) - 2L) extern int utimensat(int fd, const char *path, const struct timespec times[2], int flags); extern int futimens(int fd, const struct timespec times[2]); diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/statvfs.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/statvfs.h index e910c03..3d8179e 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/statvfs.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/statvfs.h @@ -23,19 +23,21 @@ __BEGIN_DECLS -struct statvfs { - unsigned long f_bsize; - unsigned long f_frsize; - fsblkcnt_t f_blocks; - fsblkcnt_t f_bfree; - fsblkcnt_t f_bavail; - fsfilcnt_t f_files; - fsfilcnt_t f_ffree; - fsfilcnt_t f_favail; - unsigned long f_fsid; - unsigned long f_flag; - unsigned long f_namemax; -}; +#define __STATVFS64_BODY \ + unsigned long f_bsize; \ + unsigned long f_frsize; \ + fsblkcnt_t f_blocks; \ + fsblkcnt_t f_bfree; \ + fsblkcnt_t f_bavail; \ + fsfilcnt_t f_files; \ + fsfilcnt_t f_ffree; \ + fsfilcnt_t f_favail; \ + unsigned long f_fsid; \ + unsigned long f_flag; \ + unsigned long f_namemax; \ + +struct statvfs { __STATVFS64_BODY }; +struct statvfs64 { __STATVFS64_BODY }; #define ST_RDONLY 0x0001 #define ST_NOSUID 0x0002 @@ -48,7 +50,9 @@ struct statvfs { #define ST_RELATIME 0x1000 extern int statvfs(const char* __restrict, struct statvfs* __restrict) __nonnull((1, 2)); +extern int statvfs64(const char* __restrict, struct statvfs64* __restrict) __nonnull((1, 2)); extern int fstatvfs(int, struct statvfs*) __nonnull((2)); +extern int fstatvfs64(int, struct statvfs64*) __nonnull((2)); __END_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/times.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/times.h index 1b9b8b2..6ce5b55 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/times.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/times.h @@ -25,6 +25,7 @@ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ + #ifndef _SYS_TIMES_H_ #define _SYS_TIMES_H_ @@ -34,7 +35,7 @@ __BEGIN_DECLS -extern clock_t times(struct tms *); +extern clock_t times(struct tms*); __END_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/types.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/types.h index f8ae813..dc847d2 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/types.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/types.h @@ -35,28 +35,48 @@ #include <linux/types.h> #include <linux/posix_types.h> -/* __kernel_gid_t and __kernel_uid_t are 16 bit for legacy reasons. - * Android uses __kernel_uid32_t and __kernel_gid32_t instead. - */ -typedef __kernel_gid32_t gid_t; -typedef __kernel_uid32_t uid_t; +/* gids, uids, and pids are all 32-bit. */ +typedef __kernel_gid32_t __gid_t; +typedef __gid_t gid_t; +typedef __kernel_uid32_t __uid_t; +typedef __uid_t uid_t; +typedef __kernel_pid_t __pid_t; +typedef __pid_t pid_t; +typedef uint32_t __id_t; +typedef __id_t id_t; typedef unsigned long blkcnt_t; typedef unsigned long blksize_t; typedef __kernel_caddr_t caddr_t; typedef __kernel_clock_t clock_t; -typedef __kernel_clockid_t clockid_t; + +typedef __kernel_clockid_t __clockid_t; +typedef __clockid_t clockid_t; + typedef __kernel_daddr_t daddr_t; typedef unsigned long fsblkcnt_t; typedef unsigned long fsfilcnt_t; -typedef __kernel_ino_t ino_t; -typedef __kernel_key_t key_t; -typedef __kernel_mode_t mode_t; + +typedef __kernel_mode_t __mode_t; +typedef __mode_t mode_t; + +typedef __kernel_key_t __key_t; +typedef __key_t key_t; + +typedef uint32_t __ino_t; +typedef __ino_t ino_t; + +typedef uint32_t __nlink_t; typedef __nlink_t nlink_t; -typedef __kernel_pid_t pid_t; -typedef __kernel_suseconds_t suseconds_t; -typedef __kernel_timer_t timer_t; -typedef unsigned int useconds_t; + +typedef void* __timer_t; +typedef __timer_t timer_t; + +typedef int32_t __suseconds_t; +typedef __suseconds_t suseconds_t; + +typedef uint32_t __useconds_t; +typedef __useconds_t useconds_t; #if !defined(__LP64__) /* This historical accident means that we had a 32-bit dev_t on 32-bit architectures. */ @@ -66,7 +86,8 @@ typedef uint64_t dev_t; #endif /* This historical accident means that we had a 32-bit time_t on 32-bit architectures. */ -typedef __kernel_time_t time_t; +typedef __kernel_time_t __time_t; +typedef __time_t time_t; /* This historical accident means that we had a 32-bit off_t on 32-bit architectures. */ #ifndef _OFF_T_DEFINED_ @@ -76,9 +97,6 @@ typedef __kernel_off_t off_t; typedef __kernel_loff_t loff_t; typedef loff_t off64_t; -/* This one really is meant to be just 32 bits! */ -typedef uint32_t id_t; - /* while POSIX wants these in <sys/types.h>, we * declare then in <pthread.h> instead */ #if 0 @@ -93,6 +111,17 @@ typedef .... pthread_rwlock_attr_t; typedef .... pthread_t; #endif +#if !defined(__LP64__) +/* This historical accident means that we had a signed socklen_t on 32-bit architectures. */ +typedef int32_t __socklen_t; +#else +/* LP64 still has a 32-bit socklen_t. */ +typedef uint32_t __socklen_t; +#endif +typedef __socklen_t socklen_t; + +typedef __builtin_va_list __va_list; + #ifndef _SSIZE_T_DEFINED_ #define _SSIZE_T_DEFINED_ /* Traditionally, bionic's ssize_t was "long int". This caused GCC to emit warnings when you diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/un.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/un.h index f89ead3..65ffbdc 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/un.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/un.h @@ -28,8 +28,7 @@ #ifndef _SYS_UN_H_ #define _SYS_UN_H_ -#include <sys/_types.h> -typedef __sa_family_t sa_family_t; +typedef unsigned short sa_family_t; #include <linux/un.h> diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/user.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/user.h index 90cce80..e16b1a5 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/user.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/user.h @@ -30,6 +30,7 @@ #define _SYS_USER_H_ #include <sys/cdefs.h> +#include <limits.h> /* For PAGE_SIZE. */ __BEGIN_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/sys/vfs.h b/9/platforms/android-19/arch-x86_64/usr/include/sys/vfs.h index fd2655c..cd6044d 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/sys/vfs.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/sys/vfs.h @@ -38,76 +38,74 @@ __BEGIN_DECLS typedef struct { int __val[2]; } __fsid_t; typedef __fsid_t fsid_t; -#if defined(__LP64__) -#if defined(__mips__) -/* 64-bit MIPS */ -struct statfs { - uint64_t f_type; - uint64_t f_bsize; - uint64_t f_frsize; /* Fragment size - unsupported */ - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_bavail; - fsid_t f_fsid; - uint64_t f_namelen; - uint64_t f_flags; - uint64_t f_spare[5]; -}; -#else -struct statfs { - uint64_t f_type; - uint64_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - fsid_t f_fsid; - uint64_t f_namelen; - uint64_t f_frsize; - uint64_t f_flags; - uint64_t f_spare[4]; -}; -#endif +#if defined(__aarch64__) || defined(__x86_64__) +#define __STATFS64_BODY \ + uint64_t f_type; \ + uint64_t f_bsize; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_bavail; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + fsid_t f_fsid; \ + uint64_t f_namelen; \ + uint64_t f_frsize; \ + uint64_t f_flags; \ + uint64_t f_spare[4]; \ + +#elif defined(__mips__) && defined(__LP64__) +/* 64-bit MIPS. */ +#define __STATFS64_BODY \ + uint64_t f_type; \ + uint64_t f_bsize; \ + uint64_t f_frsize; /* Fragment size - unsupported. */ \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + uint64_t f_bavail; \ + fsid_t f_fsid; \ + uint64_t f_namelen; \ + uint64_t f_flags; \ + uint64_t f_spare[5]; \ + #elif defined(__mips__) /* 32-bit MIPS (corresponds to the kernel's statfs64 type). */ -struct statfs { - uint32_t f_type; - uint32_t f_bsize; - uint32_t f_frsize; - uint32_t __pad; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_files; - uint64_t f_ffree; - uint64_t f_bavail; - fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_flags; - uint32_t f_spare[5]; -}; +#define __STATFS64_BODY \ + uint32_t f_type; \ + uint32_t f_bsize; \ + uint32_t f_frsize; \ + uint32_t __pad; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + uint64_t f_bavail; \ + fsid_t f_fsid; \ + uint32_t f_namelen; \ + uint32_t f_flags; \ + uint32_t f_spare[5]; \ + #else /* 32-bit ARM or x86 (corresponds to the kernel's statfs64 type). */ -struct statfs { - uint32_t f_type; - uint32_t f_bsize; - uint64_t f_blocks; - uint64_t f_bfree; - uint64_t f_bavail; - uint64_t f_files; - uint64_t f_ffree; - fsid_t f_fsid; - uint32_t f_namelen; - uint32_t f_frsize; - uint32_t f_flags; - uint32_t f_spare[4]; -}; +#define __STATFS64_BODY \ + uint32_t f_type; \ + uint32_t f_bsize; \ + uint64_t f_blocks; \ + uint64_t f_bfree; \ + uint64_t f_bavail; \ + uint64_t f_files; \ + uint64_t f_ffree; \ + fsid_t f_fsid; \ + uint32_t f_namelen; \ + uint32_t f_frsize; \ + uint32_t f_flags; \ + uint32_t f_spare[4]; \ + #endif -/* Source compatibility with glibc. */ -#define statfs64 statfs +struct statfs { __STATFS64_BODY }; +struct statfs64 { __STATFS64_BODY }; /* Declare that we have the f_namelen, f_frsize, and f_flags fields. */ #define _STATFS_F_NAMELEN @@ -160,7 +158,9 @@ struct statfs { #define _XIAFS_SUPER_MAGIC 0x012FD16D extern int statfs(const char*, struct statfs*) __nonnull((1, 2)); +extern int statfs64(const char*, struct statfs64*) __nonnull((1, 2)); extern int fstatfs(int, struct statfs*) __nonnull((2)); +extern int fstatfs64(int, struct statfs64*) __nonnull((2)); __END_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/termios.h b/9/platforms/android-19/arch-x86_64/usr/include/termios.h index 0d44355..b9685ca 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/termios.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/termios.h @@ -31,87 +31,23 @@ #include <sys/cdefs.h> #include <sys/ioctl.h> #include <sys/types.h> -#include <stdint.h> #include <linux/termios.h> __BEGIN_DECLS -/* Redefine these to match their ioctl number */ -#undef TCSANOW -#define TCSANOW TCSETS - -#undef TCSADRAIN -#define TCSADRAIN TCSETSW - -#undef TCSAFLUSH -#define TCSAFLUSH TCSETSF - -static __inline__ int tcgetattr(int fd, struct termios *s) -{ - return ioctl(fd, TCGETS, s); -} - -static __inline__ int tcsetattr(int fd, int __opt, const struct termios *s) -{ - return ioctl(fd, __opt, (void *)s); -} - -static __inline__ int tcflow(int fd, int action) -{ - return ioctl(fd, TCXONC, (void *)(intptr_t)action); -} - -static __inline__ int tcflush(int fd, int __queue) -{ - return ioctl(fd, TCFLSH, (void *)(intptr_t)__queue); -} - -static __inline__ int tcdrain(int fd) -{ - return ioctl(fd, TCSBRK, (void *)(intptr_t)1); -} - -static __inline__ pid_t tcgetsid(int fd) -{ - pid_t _pid; - return ioctl(fd, TIOCGSID, &_pid) ? (pid_t)-1 : _pid; -} - -static __inline__ int tcsendbreak(int fd, int __duration) -{ - return ioctl(fd, TCSBRKP, (void *)(uintptr_t)__duration); -} - -static __inline__ speed_t cfgetospeed(const struct termios *s) -{ - return (speed_t)(s->c_cflag & CBAUD); -} - -static __inline__ int cfsetospeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static __inline__ speed_t cfgetispeed(const struct termios *s) -{ - return (speed_t)(s->c_cflag & CBAUD); -} - -static __inline__ int cfsetispeed(struct termios *s, speed_t speed) -{ - s->c_cflag = (s->c_cflag & ~CBAUD) | (speed & CBAUD); - return 0; -} - -static __inline__ void cfmakeraw(struct termios *s) -{ - s->c_iflag &= ~(IGNBRK|BRKINT|PARMRK|ISTRIP|INLCR|IGNCR|ICRNL|IXON); - s->c_oflag &= ~OPOST; - s->c_lflag &= ~(ECHO|ECHONL|ICANON|ISIG|IEXTEN); - s->c_cflag &= ~(CSIZE|PARENB); - s->c_cflag |= CS8; -} +speed_t cfgetispeed(const struct termios*); +speed_t cfgetospeed(const struct termios*); +void cfmakeraw(struct termios*); +int cfsetispeed(struct termios*, speed_t); +int cfsetospeed(struct termios*, speed_t); +int cfsetspeed(struct termios*, speed_t); +int tcdrain(int); +int tcflow(int, int); +int tcflush(int, int); +int tcgetattr(int, struct termios*); +pid_t tcgetsid(int); +int tcsendbreak(int, int); +int tcsetattr(int, int, const struct termios*); __END_DECLS diff --git a/9/platforms/android-19/arch-x86_64/usr/include/unistd.h b/9/platforms/android-19/arch-x86_64/usr/include/unistd.h index 29758f5..d21f23d 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/unistd.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/unistd.h @@ -64,6 +64,7 @@ extern pid_t setsid(void); extern int execv(const char *, char * const *); extern int execvp(const char *, char * const *); +extern int execvpe(const char *, char * const *, char * const *); extern int execve(const char *, char * const *, char * const *); extern int execl(const char *, const char *, ...); extern int execlp(const char *, const char *, ...); @@ -185,14 +186,15 @@ extern int sysconf(int name); extern int daemon(int, int); -/* A special syscall that is only available on the ARM, not x86 function. */ -extern int cacheflush(long start, long end, long flags); +#if defined(__arm__) || (defined(__mips__) && !defined(__LP64__)) +extern int cacheflush(long, long, long); + /* __attribute__((deprecated("use __builtin___clear_cache instead"))); */ +#endif extern pid_t tcgetpgrp(int fd); extern int tcsetpgrp(int fd, pid_t _pid); #if 0 /* MISSING FROM BIONIC */ -extern int execvpe(const char *, char * const *, char * const *); extern int execlpe(const char *, const char *, ...); extern int getfsuid(uid_t); extern int setfsuid(uid_t); diff --git a/9/platforms/android-19/arch-x86_64/usr/include/wchar.h b/9/platforms/android-19/arch-x86_64/usr/include/wchar.h index 76ac02c..32cf127 100644 --- a/9/platforms/android-19/arch-x86_64/usr/include/wchar.h +++ b/9/platforms/android-19/arch-x86_64/usr/include/wchar.h @@ -147,6 +147,9 @@ extern wchar_t *wmemset(wchar_t *, wchar_t, size_t); extern int wprintf(const wchar_t *, ...); extern int wscanf(const wchar_t *, ...); +extern size_t wcslcat(wchar_t*, const wchar_t*, size_t); +extern size_t wcslcpy(wchar_t*, const wchar_t*, size_t); + /* No really supported. These are just for making libstdc++-v3 happy. */ typedef void *wctrans_t; extern wint_t towctrans(wint_t, wctrans_t); diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_dynamic.o b/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_dynamic.o Binary files differindex a2cb414..03cbdea 100644 --- a/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_dynamic.o +++ b/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_dynamic.o diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_so.o b/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_so.o Binary files differindex db1273c..d6768bf 100644 --- a/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_so.o +++ b/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_so.o diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_static.o b/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_static.o Binary files differindex a2cb414..03cbdea 100644 --- a/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_static.o +++ b/9/platforms/android-19/arch-x86_64/usr/lib/crtbegin_static.o diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libEGL.so b/9/platforms/android-19/arch-x86_64/usr/lib/libEGL.so Binary files differindex d7d0e1a..f9227e1 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libEGL.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libEGL.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv1_CM.so b/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv1_CM.so Binary files differindex cbf72a5..0b6fec4 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv1_CM.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv1_CM.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv2.so b/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv2.so Binary files differindex 6800353..0946577 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv2.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv2.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv3.so b/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv3.so Binary files differindex 3bc8feb..7d62748 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv3.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libGLESv3.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libOpenMAXAL.so b/9/platforms/android-19/arch-x86_64/usr/lib/libOpenMAXAL.so Binary files differindex baf52a2..02f282f 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libOpenMAXAL.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libOpenMAXAL.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libOpenSLES.so b/9/platforms/android-19/arch-x86_64/usr/lib/libOpenSLES.so Binary files differindex 1e990c0..0d1cb60 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libOpenSLES.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libOpenSLES.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libandroid.so b/9/platforms/android-19/arch-x86_64/usr/lib/libandroid.so Binary files differindex 0ea45e5..e2d58b7 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libandroid.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libandroid.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libc.a b/9/platforms/android-19/arch-x86_64/usr/lib/libc.a Binary files differindex 882588d..5e0267f 100644 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libc.a +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libc.a diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libc.so b/9/platforms/android-19/arch-x86_64/usr/lib/libc.so Binary files differindex 5643646..aaa31bc 100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libc.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libc.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libdl.so b/9/platforms/android-19/arch-x86_64/usr/lib/libdl.so Binary files differindex 1fadb14..c8f4b8f 100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libdl.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libdl.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libjnigraphics.so b/9/platforms/android-19/arch-x86_64/usr/lib/libjnigraphics.so Binary files differindex ae00ddf..40b263d 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libjnigraphics.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libjnigraphics.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/liblog.so b/9/platforms/android-19/arch-x86_64/usr/lib/liblog.so Binary files differindex 92b2079..c2289ff 100644..100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/liblog.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/liblog.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libm.a b/9/platforms/android-19/arch-x86_64/usr/lib/libm.a Binary files differindex 2d8d284..d00c083 100644 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libm.a +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libm.a diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libm.so b/9/platforms/android-19/arch-x86_64/usr/lib/libm.so Binary files differindex b8b5871..37e8891 100755 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libm.so +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libm.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libstdc++.a b/9/platforms/android-19/arch-x86_64/usr/lib/libstdc++.a Binary files differindex a9f332b..91b8ae2 100644 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libstdc++.a +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libstdc++.a diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libstdc++.so b/9/platforms/android-19/arch-x86_64/usr/lib/libstdc++.so Binary files differnew file mode 100755 index 0000000..3198fa6 --- /dev/null +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libstdc++.so diff --git a/9/platforms/android-19/arch-x86_64/usr/lib/libz.a b/9/platforms/android-19/arch-x86_64/usr/lib/libz.a Binary files differindex ba47842..7cb4528 100644 --- a/9/platforms/android-19/arch-x86_64/usr/lib/libz.a +++ b/9/platforms/android-19/arch-x86_64/usr/lib/libz.a |