Changeset 7ad3c2f in mainline
- Timestamp:
- 2006-03-14T16:34:17Z (19 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 00c4994
- Parents:
- 79522a7
- Location:
- libc
- Files:
-
- 4 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
libc/Makefile
r79522a7 r7ad3c2f 44 44 generic/mmap.c \ 45 45 generic/io/io.c \ 46 generic/io/print.c 46 generic/io/print.c \ 47 malloc/malloc.c 47 48 48 49 ARCH_SOURCES += \ -
libc/arch/amd64/_link.ld.in
r79522a7 r7ad3c2f 24 24 *(COMMON); 25 25 *(.bss); 26 _heap = .; 27 QUAD(0xdeadbeef); 26 28 } :data 27 29 -
libc/arch/ia32/_link.ld.in
r79522a7 r7ad3c2f 24 24 *(COMMON); 25 25 *(.bss); 26 _heap = .; 27 LONG(0xdeadbeef); 26 28 } :data 27 29 -
libc/arch/ia64/_link.ld.in
r79522a7 r7ad3c2f 32 32 *(COMMON); 33 33 *(.bss); 34 _heap = .; 35 QUAD(0xdeadbeef); 34 36 } :data 35 37 -
libc/arch/mips32/_link.ld.in
r79522a7 r7ad3c2f 25 25 *(.sbss); 26 26 *(COMMON); 27 _heap = .; 28 LONG(0xdeadbeef); 27 29 } :data 28 30 -
libc/generic/mmap.c
r79522a7 r7ad3c2f 30 30 #include <unistd.h> 31 31 32 /** Mremap syscall */ 32 33 void *mremap(void *address, size_t size, unsigned long flags) 33 34 { 34 35 return (void *) __SYSCALL3(SYS_MREMAP, (sysarg_t ) address, (sysarg_t) size, (sysarg_t) flags); 35 36 } 37 38 39 static size_t heapsize = 0; 40 /* Start of heap linker symbol */ 41 extern char _heap; 42 43 /** Sbrk emulation 44 * 45 * @param size New area that should be allocated or negative, 46 if it should be shrinked 47 * @return Pointer to newly allocated area 48 */ 49 void *sbrk(ssize_t incr) 50 { 51 void *res; 52 /* Check for invalid values */ 53 if (incr < 0 && -incr > heapsize) 54 return NULL; 55 /* Check for too large value */ 56 if (incr > 0 && incr+heapsize < heapsize) 57 return NULL; 58 /* Check for too small values */ 59 if (incr < 0 && incr+heapsize > heapsize) 60 return NULL; 61 62 res = mremap(&_heap, heapsize + incr,0); 63 if (!res) 64 return NULL; 65 res = (void *)&_heap + incr; 66 heapsize += incr; 67 return res; 68 } -
libc/include/malloc.h
r79522a7 r7ad3c2f 48 48 #define dlmalloc_usable_size malloc_usable_size 49 49 #define dlmalloc_footprint malloc_footprint 50 #define dlmalloc_max_footprint malloc_max_footprint 50 51 #define dlindependent_calloc independent_calloc 51 52 #define dlindependent_comalloc independent_comalloc … … 163 164 so results might not be up to date. 164 165 */ 165 size_t dlmalloc_footprint(); 166 size_t dlmalloc_footprint(void); 167 size_t dlmalloc_max_footprint(void); 166 168 167 169 #if !NO_MALLINFO … … 392 394 More information can be obtained by calling mallinfo. 393 395 */ 394 void dlmalloc_stats( );396 void dlmalloc_stats(void); 395 397 396 398 #endif /* !ONLY_MSPACES */ -
libc/include/stdio.h
r79522a7 r7ad3c2f 37 37 38 38 extern int printf(const char *fmt, ...); 39 #define fprintf(f, fmt, ...) printf(fmt, ##__VA_ARGS__) 39 40 40 41 #endif -
libc/include/unistd.h
r79522a7 r7ad3c2f 37 37 extern void _exit(int status); 38 38 void * mremap(void *address, size_t size, unsigned long flags); 39 void *sbrk(ssize_t incr); 39 40 40 41 #endif -
libc/malloc/malloc.c
r79522a7 r7ad3c2f 584 584 #define M_MMAP_THRESHOLD (-3) 585 585 586 /* ------------------------ Mallinfo declarations ------------------------ */ 587 588 #if !NO_MALLINFO 589 /* 590 This version of malloc supports the standard SVID/XPG mallinfo 591 routine that returns a struct containing usage properties and 592 statistics. It should work on any system that has a 593 /usr/include/malloc.h defining struct mallinfo. The main 594 declaration needed is the mallinfo struct that is returned (by-copy) 595 by mallinfo(). The malloinfo struct contains a bunch of fields that 596 are not even meaningful in this version of malloc. These fields are 597 are instead filled by mallinfo() with other numbers that might be of 598 interest. 599 600 HAVE_USR_INCLUDE_MALLOC_H should be set if you have a 601 /usr/include/malloc.h file that includes a declaration of struct 602 mallinfo. If so, it is included; else a compliant version is 603 declared below. These must be precisely the same for mallinfo() to 604 work. The original SVID version of this struct, defined on most 605 systems with mallinfo, declares all fields as ints. But some others 606 define as unsigned long. If your system defines the fields using a 607 type of different width than listed here, you MUST #include your 608 system version and #define HAVE_USR_INCLUDE_MALLOC_H. 609 */ 610 611 /* #define HAVE_USR_INCLUDE_MALLOC_H */ 612 613 #ifdef HAVE_USR_INCLUDE_MALLOC_H 614 #include "/usr/include/malloc.h" 615 #else /* HAVE_USR_INCLUDE_MALLOC_H */ 616 617 struct mallinfo { 618 MALLINFO_FIELD_TYPE arena; /* non-mmapped space allocated from system */ 619 MALLINFO_FIELD_TYPE ordblks; /* number of free chunks */ 620 MALLINFO_FIELD_TYPE smblks; /* always 0 */ 621 MALLINFO_FIELD_TYPE hblks; /* always 0 */ 622 MALLINFO_FIELD_TYPE hblkhd; /* space in mmapped regions */ 623 MALLINFO_FIELD_TYPE usmblks; /* maximum total allocated space */ 624 MALLINFO_FIELD_TYPE fsmblks; /* always 0 */ 625 MALLINFO_FIELD_TYPE uordblks; /* total allocated space */ 626 MALLINFO_FIELD_TYPE fordblks; /* total free space */ 627 MALLINFO_FIELD_TYPE keepcost; /* releasable (via malloc_trim) space */ 628 }; 629 630 #endif /* HAVE_USR_INCLUDE_MALLOC_H */ 631 #endif /* NO_MALLINFO */ 632 633 #ifdef __cplusplus 634 extern "C" { 635 #endif /* __cplusplus */ 636 637 #if !ONLY_MSPACES 638 639 /* ------------------- Declarations of public routines ------------------- */ 640 641 #ifndef USE_DL_PREFIX 642 #define dlcalloc calloc 643 #define dlfree free 644 #define dlmalloc malloc 645 #define dlmemalign memalign 646 #define dlrealloc realloc 647 #define dlvalloc valloc 648 #define dlpvalloc pvalloc 649 #define dlmallinfo mallinfo 650 #define dlmallopt mallopt 651 #define dlmalloc_trim malloc_trim 652 #define dlmalloc_stats malloc_stats 653 #define dlmalloc_usable_size malloc_usable_size 654 #define dlmalloc_footprint malloc_footprint 655 #define dlmalloc_max_footprint malloc_max_footprint 656 #define dlindependent_calloc independent_calloc 657 #define dlindependent_comalloc independent_comalloc 658 #endif /* USE_DL_PREFIX */ 659 660 661 /* 662 malloc(size_t n) 663 Returns a pointer to a newly allocated chunk of at least n bytes, or 664 null if no space is available, in which case errno is set to ENOMEM 665 on ANSI C systems. 666 667 If n is zero, malloc returns a minimum-sized chunk. (The minimum 668 size is 16 bytes on most 32bit systems, and 32 bytes on 64bit 669 systems.) Note that size_t is an unsigned type, so calls with 670 arguments that would be negative if signed are interpreted as 671 requests for huge amounts of space, which will often fail. The 672 maximum supported value of n differs across systems, but is in all 673 cases less than the maximum representable value of a size_t. 674 */ 675 void* dlmalloc(size_t); 676 677 /* 678 free(void* p) 679 Releases the chunk of memory pointed to by p, that had been previously 680 allocated using malloc or a related routine such as realloc. 681 It has no effect if p is null. If p was not malloced or already 682 freed, free(p) will by default cause the current program to abort. 683 */ 684 void dlfree(void*); 685 686 /* 687 calloc(size_t n_elements, size_t element_size); 688 Returns a pointer to n_elements * element_size bytes, with all locations 689 set to zero. 690 */ 691 void* dlcalloc(size_t, size_t); 692 693 /* 694 realloc(void* p, size_t n) 695 Returns a pointer to a chunk of size n that contains the same data 696 as does chunk p up to the minimum of (n, p's size) bytes, or null 697 if no space is available. 698 699 The returned pointer may or may not be the same as p. The algorithm 700 prefers extending p in most cases when possible, otherwise it 701 employs the equivalent of a malloc-copy-free sequence. 702 703 If p is null, realloc is equivalent to malloc. 704 705 If space is not available, realloc returns null, errno is set (if on 706 ANSI) and p is NOT freed. 707 708 if n is for fewer bytes than already held by p, the newly unused 709 space is lopped off and freed if possible. realloc with a size 710 argument of zero (re)allocates a minimum-sized chunk. 711 712 The old unix realloc convention of allowing the last-free'd chunk 713 to be used as an argument to realloc is not supported. 714 */ 715 716 void* dlrealloc(void*, size_t); 717 718 /* 719 memalign(size_t alignment, size_t n); 720 Returns a pointer to a newly allocated chunk of n bytes, aligned 721 in accord with the alignment argument. 722 723 The alignment argument should be a power of two. If the argument is 724 not a power of two, the nearest greater power is used. 725 8-byte alignment is guaranteed by normal malloc calls, so don't 726 bother calling memalign with an argument of 8 or less. 727 728 Overreliance on memalign is a sure way to fragment space. 729 */ 730 void* dlmemalign(size_t, size_t); 731 732 /* 733 valloc(size_t n); 734 Equivalent to memalign(pagesize, n), where pagesize is the page 735 size of the system. If the pagesize is unknown, 4096 is used. 736 */ 737 void* dlvalloc(size_t); 738 739 /* 740 mallopt(int parameter_number, int parameter_value) 741 Sets tunable parameters The format is to provide a 742 (parameter-number, parameter-value) pair. mallopt then sets the 743 corresponding parameter to the argument value if it can (i.e., so 744 long as the value is meaningful), and returns 1 if successful else 745 0. SVID/XPG/ANSI defines four standard param numbers for mallopt, 746 normally defined in malloc.h. None of these are use in this malloc, 747 so setting them has no effect. But this malloc also supports other 748 options in mallopt. See below for details. Briefly, supported 749 parameters are as follows (listed defaults are for "typical" 750 configurations). 751 752 Symbol param # default allowed param values 753 M_TRIM_THRESHOLD -1 2*1024*1024 any (MAX_SIZE_T disables) 754 M_GRANULARITY -2 page size any power of 2 >= page size 755 M_MMAP_THRESHOLD -3 256*1024 any (or 0 if no MMAP support) 756 */ 757 int dlmallopt(int, int); 758 759 /* 760 malloc_footprint(); 761 Returns the number of bytes obtained from the system. The total 762 number of bytes allocated by malloc, realloc etc., is less than this 763 value. Unlike mallinfo, this function returns only a precomputed 764 result, so can be called frequently to monitor memory consumption. 765 Even if locks are otherwise defined, this function does not use them, 766 so results might not be up to date. 767 */ 768 size_t dlmalloc_footprint(void); 769 770 /* 771 malloc_max_footprint(); 772 Returns the maximum number of bytes obtained from the system. This 773 value will be greater than current footprint if deallocated space 774 has been reclaimed by the system. The peak number of bytes allocated 775 by malloc, realloc etc., is less than this value. Unlike mallinfo, 776 this function returns only a precomputed result, so can be called 777 frequently to monitor memory consumption. Even if locks are 778 otherwise defined, this function does not use them, so results might 779 not be up to date. 780 */ 781 size_t dlmalloc_max_footprint(void); 782 783 #if !NO_MALLINFO 784 /* 785 mallinfo() 786 Returns (by copy) a struct containing various summary statistics: 787 788 arena: current total non-mmapped bytes allocated from system 789 ordblks: the number of free chunks 790 smblks: always zero. 791 hblks: current number of mmapped regions 792 hblkhd: total bytes held in mmapped regions 793 usmblks: the maximum total allocated space. This will be greater 794 than current total if trimming has occurred. 795 fsmblks: always zero 796 uordblks: current total allocated space (normal or mmapped) 797 fordblks: total free space 798 keepcost: the maximum number of bytes that could ideally be released 799 back to system via malloc_trim. ("ideally" means that 800 it ignores page restrictions etc.) 801 802 Because these fields are ints, but internal bookkeeping may 803 be kept as longs, the reported values may wrap around zero and 804 thus be inaccurate. 805 */ 806 struct mallinfo dlmallinfo(void); 807 #endif /* NO_MALLINFO */ 808 809 /* 810 independent_calloc(size_t n_elements, size_t element_size, void* chunks[]); 811 812 independent_calloc is similar to calloc, but instead of returning a 813 single cleared space, it returns an array of pointers to n_elements 814 independent elements that can hold contents of size elem_size, each 815 of which starts out cleared, and can be independently freed, 816 realloc'ed etc. The elements are guaranteed to be adjacently 817 allocated (this is not guaranteed to occur with multiple callocs or 818 mallocs), which may also improve cache locality in some 819 applications. 820 821 The "chunks" argument is optional (i.e., may be null, which is 822 probably the most typical usage). If it is null, the returned array 823 is itself dynamically allocated and should also be freed when it is 824 no longer needed. Otherwise, the chunks array must be of at least 825 n_elements in length. It is filled in with the pointers to the 826 chunks. 827 828 In either case, independent_calloc returns this pointer array, or 829 null if the allocation failed. If n_elements is zero and "chunks" 830 is null, it returns a chunk representing an array with zero elements 831 (which should be freed if not wanted). 832 833 Each element must be individually freed when it is no longer 834 needed. If you'd like to instead be able to free all at once, you 835 should instead use regular calloc and assign pointers into this 836 space to represent elements. (In this case though, you cannot 837 independently free elements.) 838 839 independent_calloc simplifies and speeds up implementations of many 840 kinds of pools. It may also be useful when constructing large data 841 structures that initially have a fixed number of fixed-sized nodes, 842 but the number is not known at compile time, and some of the nodes 843 may later need to be freed. For example: 844 845 struct Node { int item; struct Node* next; }; 846 847 struct Node* build_list() { 848 struct Node** pool; 849 int n = read_number_of_nodes_needed(); 850 if (n <= 0) return 0; 851 pool = (struct Node**)(independent_calloc(n, sizeof(struct Node), 0); 852 if (pool == 0) die(); 853 // organize into a linked list... 854 struct Node* first = pool[0]; 855 for (i = 0; i < n-1; ++i) 856 pool[i]->next = pool[i+1]; 857 free(pool); // Can now free the array (or not, if it is needed later) 858 return first; 859 } 860 */ 861 void** dlindependent_calloc(size_t, size_t, void**); 862 863 /* 864 independent_comalloc(size_t n_elements, size_t sizes[], void* chunks[]); 865 866 independent_comalloc allocates, all at once, a set of n_elements 867 chunks with sizes indicated in the "sizes" array. It returns 868 an array of pointers to these elements, each of which can be 869 independently freed, realloc'ed etc. The elements are guaranteed to 870 be adjacently allocated (this is not guaranteed to occur with 871 multiple callocs or mallocs), which may also improve cache locality 872 in some applications. 873 874 The "chunks" argument is optional (i.e., may be null). If it is null 875 the returned array is itself dynamically allocated and should also 876 be freed when it is no longer needed. Otherwise, the chunks array 877 must be of at least n_elements in length. It is filled in with the 878 pointers to the chunks. 879 880 In either case, independent_comalloc returns this pointer array, or 881 null if the allocation failed. If n_elements is zero and chunks is 882 null, it returns a chunk representing an array with zero elements 883 (which should be freed if not wanted). 884 885 Each element must be individually freed when it is no longer 886 needed. If you'd like to instead be able to free all at once, you 887 should instead use a single regular malloc, and assign pointers at 888 particular offsets in the aggregate space. (In this case though, you 889 cannot independently free elements.) 890 891 independent_comallac differs from independent_calloc in that each 892 element may have a different size, and also that it does not 893 automatically clear elements. 894 895 independent_comalloc can be used to speed up allocation in cases 896 where several structs or objects must always be allocated at the 897 same time. For example: 898 899 struct Head { ... } 900 struct Foot { ... } 901 902 void send_message(char* msg) { 903 int msglen = strlen(msg); 904 size_t sizes[3] = { sizeof(struct Head), msglen, sizeof(struct Foot) }; 905 void* chunks[3]; 906 if (independent_comalloc(3, sizes, chunks) == 0) 907 die(); 908 struct Head* head = (struct Head*)(chunks[0]); 909 char* body = (char*)(chunks[1]); 910 struct Foot* foot = (struct Foot*)(chunks[2]); 911 // ... 912 } 913 914 In general though, independent_comalloc is worth using only for 915 larger values of n_elements. For small values, you probably won't 916 detect enough difference from series of malloc calls to bother. 917 918 Overuse of independent_comalloc can increase overall memory usage, 919 since it cannot reuse existing noncontiguous small chunks that 920 might be available for some of the elements. 921 */ 922 void** dlindependent_comalloc(size_t, size_t*, void**); 923 924 925 /* 926 pvalloc(size_t n); 927 Equivalent to valloc(minimum-page-that-holds(n)), that is, 928 round up n to nearest pagesize. 929 */ 930 void* dlpvalloc(size_t); 931 932 /* 933 malloc_trim(size_t pad); 934 935 If possible, gives memory back to the system (via negative arguments 936 to sbrk) if there is unused memory at the `high' end of the malloc 937 pool or in unused MMAP segments. You can call this after freeing 938 large blocks of memory to potentially reduce the system-level memory 939 requirements of a program. However, it cannot guarantee to reduce 940 memory. Under some allocation patterns, some large free blocks of 941 memory will be locked between two used chunks, so they cannot be 942 given back to the system. 943 944 The `pad' argument to malloc_trim represents the amount of free 945 trailing space to leave untrimmed. If this argument is zero, only 946 the minimum amount of memory to maintain internal data structures 947 will be left. Non-zero arguments can be supplied to maintain enough 948 trailing space to service future expected allocations without having 949 to re-obtain memory from the system. 950 951 Malloc_trim returns 1 if it actually released any memory, else 0. 952 */ 953 int dlmalloc_trim(size_t); 954 955 /* 956 malloc_usable_size(void* p); 957 958 Returns the number of bytes you can actually use in 959 an allocated chunk, which may be more than you requested (although 960 often not) due to alignment and minimum size constraints. 961 You can use this many bytes without worrying about 962 overwriting other allocated objects. This is not a particularly great 963 programming practice. malloc_usable_size can be more useful in 964 debugging and assertions, for example: 965 966 p = malloc(n); 967 assert(malloc_usable_size(p) >= 256); 968 */ 969 size_t dlmalloc_usable_size(void*); 970 971 /* 972 malloc_stats(); 973 Prints on stderr the amount of space obtained from the system (both 974 via sbrk and mmap), the maximum amount (which may be more than 975 current if malloc_trim and/or munmap got called), and the current 976 number of bytes allocated via malloc (or realloc, etc) but not yet 977 freed. Note that this is the number of bytes allocated, not the 978 number requested. It will be larger than the number requested 979 because of alignment and bookkeeping overhead. Because it includes 980 alignment wastage as being in use, this figure may be greater than 981 zero even when no user-level chunks are allocated. 982 983 The reported current and maximum system memory can be inaccurate if 984 a program makes other calls to system memory allocation functions 985 (normally sbrk) outside of malloc. 986 987 malloc_stats prints only the most commonly interesting statistics. 988 More information can be obtained by calling mallinfo. 989 */ 990 void dlmalloc_stats(void); 991 992 #endif /* ONLY_MSPACES */ 993 994 #if MSPACES 995 996 /* 997 mspace is an opaque type representing an independent 998 region of space that supports mspace_malloc, etc. 999 */ 1000 typedef void* mspace; 1001 1002 /* 1003 create_mspace creates and returns a new independent space with the 1004 given initial capacity, or, if 0, the default granularity size. It 1005 returns null if there is no system memory available to create the 1006 space. If argument locked is non-zero, the space uses a separate 1007 lock to control access. The capacity of the space will grow 1008 dynamically as needed to service mspace_malloc requests. You can 1009 control the sizes of incremental increases of this space by 1010 compiling with a different DEFAULT_GRANULARITY or dynamically 1011 setting with mallopt(M_GRANULARITY, value). 1012 */ 1013 mspace create_mspace(size_t capacity, int locked); 1014 1015 /* 1016 destroy_mspace destroys the given space, and attempts to return all 1017 of its memory back to the system, returning the total number of 1018 bytes freed. After destruction, the results of access to all memory 1019 used by the space become undefined. 1020 */ 1021 size_t destroy_mspace(mspace msp); 1022 1023 /* 1024 create_mspace_with_base uses the memory supplied as the initial base 1025 of a new mspace. Part (less than 128*sizeof(size_t) bytes) of this 1026 space is used for bookkeeping, so the capacity must be at least this 1027 large. (Otherwise 0 is returned.) When this initial space is 1028 exhausted, additional memory will be obtained from the system. 1029 Destroying this space will deallocate all additionally allocated 1030 space (if possible) but not the initial base. 1031 */ 1032 mspace create_mspace_with_base(void* base, size_t capacity, int locked); 1033 1034 /* 1035 mspace_malloc behaves as malloc, but operates within 1036 the given space. 1037 */ 1038 void* mspace_malloc(mspace msp, size_t bytes); 1039 1040 /* 1041 mspace_free behaves as free, but operates within 1042 the given space. 1043 1044 If compiled with FOOTERS==1, mspace_free is not actually needed. 1045 free may be called instead of mspace_free because freed chunks from 1046 any space are handled by their originating spaces. 1047 */ 1048 void mspace_free(mspace msp, void* mem); 1049 1050 /* 1051 mspace_realloc behaves as realloc, but operates within 1052 the given space. 1053 1054 If compiled with FOOTERS==1, mspace_realloc is not actually 1055 needed. realloc may be called instead of mspace_realloc because 1056 realloced chunks from any space are handled by their originating 1057 spaces. 1058 */ 1059 void* mspace_realloc(mspace msp, void* mem, size_t newsize); 1060 1061 /* 1062 mspace_calloc behaves as calloc, but operates within 1063 the given space. 1064 */ 1065 void* mspace_calloc(mspace msp, size_t n_elements, size_t elem_size); 1066 1067 /* 1068 mspace_memalign behaves as memalign, but operates within 1069 the given space. 1070 */ 1071 void* mspace_memalign(mspace msp, size_t alignment, size_t bytes); 1072 1073 /* 1074 mspace_independent_calloc behaves as independent_calloc, but 1075 operates within the given space. 1076 */ 1077 void** mspace_independent_calloc(mspace msp, size_t n_elements, 1078 size_t elem_size, void* chunks[]); 1079 1080 /* 1081 mspace_independent_comalloc behaves as independent_comalloc, but 1082 operates within the given space. 1083 */ 1084 void** mspace_independent_comalloc(mspace msp, size_t n_elements, 1085 size_t sizes[], void* chunks[]); 1086 1087 /* 1088 mspace_footprint() returns the number of bytes obtained from the 1089 system for this space. 1090 */ 1091 size_t mspace_footprint(mspace msp); 1092 1093 /* 1094 mspace_max_footprint() returns the peak number of bytes obtained from the 1095 system for this space. 1096 */ 1097 size_t mspace_max_footprint(mspace msp); 1098 1099 1100 #if !NO_MALLINFO 1101 /* 1102 mspace_mallinfo behaves as mallinfo, but reports properties of 1103 the given space. 1104 */ 1105 struct mallinfo mspace_mallinfo(mspace msp); 1106 #endif /* NO_MALLINFO */ 1107 1108 /* 1109 mspace_malloc_stats behaves as malloc_stats, but reports 1110 properties of the given space. 1111 */ 1112 void mspace_malloc_stats(mspace msp); 1113 1114 /* 1115 mspace_trim behaves as malloc_trim, but 1116 operates within the given space. 1117 */ 1118 int mspace_trim(mspace msp, size_t pad); 1119 1120 /* 1121 An alias for mallopt. 1122 */ 1123 int mspace_mallopt(int, int); 1124 1125 #endif /* MSPACES */ 1126 1127 #ifdef __cplusplus 1128 }; /* end of extern "C" */ 1129 #endif /* __cplusplus */ 586 /** Non-default helenos customizations */ 587 #define LACKS_FCNTL_H 588 #define LACKS_SYS_MMAN_H 589 #define LACKS_SYS_PARAM_H 590 #undef HAVE_MMAP 591 #define HAVE_MMAP 0 592 #define LACKS_ERRNO_H 593 /* Set errno? */ 594 #undef MALLOC_FAILURE_ACTION 595 #define MALLOC_FAILURE_ACTION 596 1130 597 1131 598 /* … … 1137 604 */ 1138 605 1139 /* #include "malloc.h" */ 606 #include "malloc.h" 1140 607 1141 608 /*------------------------------ internal #includes ---------------------- */
Note:
See TracChangeset
for help on using the changeset viewer.