This is much heavier weight than profiling
+config BUILT_IN_STDLIB
+ bool "Enable Built in versions of stdlib functions"
+ default n
+ help
+ Not all host OSes provide link targets for stdlib functions
+ Palacios provides internal implementations of these functions, that you can select from this list
+
+config BUILT_IN_MEMSET
+ bool "memset()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of memset
+
+
+config BUILT_IN_MEMCPY
+ bool "memcpy()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of memcpy
+
+config BUILT_IN_MEMCMP
+ bool "memcmp()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of memcmp
+
+config BUILT_IN_STRLEN
+ bool "strlen()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strlen
+
+config BUILT_IN_STRNLEN
+ bool "strnlen()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strnlen
+
+
+
+config BUILT_IN_STRCMP
+ bool "strcmp()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strcmp
+
+config BUILT_IN_STRNCMP
+ bool "strncmp()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strncmp
+
+config BUILT_IN_STRCAT
+ bool "strcat()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strcat
+
+config BUILT_IN_STRNCAT
+ bool "strncat()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strncat
+
+config BUILT_IN_STRCPY
+ bool "strcpy()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strcpy
+
+config BUILT_IN_STRNCPY
+ bool "strncpy()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strncpy
+
+config BUILT_IN_STRDUP
+ bool "strdup()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strdup
+
+
+config BUILT_IN_ATOI
+ bool "atoi()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of atoi
+
+config BUILT_IN_STRCHR
+ bool "strchr()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strchr
+
+config BUILT_IN_STRRCHR
+ bool "strrchr()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strrchr
+
+config BUILT_IN_STRPBRK
+ bool "strpbrk()"
+ default n
+ depends on BUILT_IN_STDLIB
+ help
+ This enables Palacios' internal implementation of strpbrk
+
+
endmenu
*svc_location &= ~flag;
-#ifdef CRAY_XT
+#ifdef CONFIG_CRAY_XT
if ((isr_irq == 238) ||
(isr_irq == 239)) {
}
static int apic_raise_intr(void * private_data, int irq) {
-#ifdef CRAY_XT
+#ifdef CONFIG_CRAY_XT
// The Seastar is connected directly to the LAPIC via LINT0 on the ICC bus
if (irq == 238) {
*svc_location |= flag;
*req_location &= ~flag;
-#ifdef CRAY_XT
+#ifdef CONFIG_CRAY_XT
if ((irq == 238) || (irq == 239)) {
PrintError("APIC: Begin IRQ %d (ISR=%x), (IRR=%x)\n", irq, *svc_location, *req_location);
}
vmm_ops->allocate_guest = &allocate_guest;
+#ifdef CONFIG_SVM
if (v3_is_svm_capable()) {
PrintDebug("Machine is SVM Capable\n");
v3_init_SVM(vmm_ops);
+
+ } else
+#endif
#ifdef CONFIG_VMX
- } else if (v3_is_vmx_capable()) {
- PrintDebug("Machine is VMX Capable\n");
- v3_init_vmx(vmm_ops);
+ if (v3_is_vmx_capable()) {
+ PrintDebug("Machine is VMX Capable\n");
+ v3_init_vmx(vmm_ops);
+
+ } else
#endif
- } else {
- PrintDebug("CPU has no virtualization Extensions\n");
+ {
+ PrintDebug("CPU has no virtualization Extensions\n");
}
}
memcpy(V3_VAddr((void *)rombios_dst), v3_rombios_start, v3_rombios_end - v3_rombios_start);
}
-#ifdef CRAY_XT
+#ifdef CONFIG_CRAY_XT
{
#define SEASTAR_START 0xffe00000
#define SEASTAR_END 0xffffffff
*/
-#define NEED_MEMSET 0
-#define NEED_MEMCPY 0
-#define NEED_MEMCMP 0
-#define NEED_STRLEN 0
-#define NEED_STRNLEN 0
-#define NEED_STRCMP 0
-#define NEED_STRNCMP 0
-#define NEED_STRCAT 0
-#define NEED_STRNCAT 0
-#define NEED_STRCPY 0
-#define NEED_STRNCPY 0
-#define NEED_STRDUP 0
-#define NEED_ATOI 0
-#define NEED_STRCHR 0
-#define NEED_STRRCHR 0
-#define NEED_STRPBRK 0
-
-
-
#include <palacios/vmm_types.h>
#include <palacios/vmm_string.h>
#include <palacios/vmm.h>
-#if NEED_MEMSET
+#ifdef CONFIG_BUILT_IN_MEMSET
void * memset(void * s, int c, size_t n) {
uchar_t * p = (uchar_t *) s;
}
#endif
-#if NEED_MEMCPY
+#ifdef CONFIG_BUILT_IN_MEMCPY
void * memcpy(void * dst, const void * src, size_t n) {
uchar_t * d = (uchar_t *) dst;
const uchar_t * s = (const uchar_t *)src;
#endif
-#if NEED_CMP
+#ifdef CONFIG_BUILT_IN_MEMCMP
int memcmp(const void * s1_, const void * s2_, size_t n) {
const char * s1 = s1_;
const char * s2 = s2_;
#endif
-#if NEED_STRLEN
+#ifdef CONFIG_BUILT_IN_STRLEN
size_t strlen(const char * s) {
size_t len = 0;
-#if NEED_STRNLEN
+#ifdef CONFIG_BUILT_IN_STRNLEN
/*
* This it a GNU extension.
* It is like strlen(), but it will check at most maxlen
#endif
-#if NEED_STRCMP
+#ifdef CONFIG_BUILT_IN_STRCMP
int strcmp(const char * s1, const char * s2) {
while (1) {
int cmp = (*s1 - *s2);
#endif
-#if NEED_STRNCMP
+#ifdef CONFIG_BUILT_IN_STRNCMP
int strncmp(const char * s1, const char * s2, size_t limit) {
size_t i = 0;
#endif
-#if NEED_STRCAT
+#ifdef CONFIG_BUILT_IN_STRCAT
char * strcat(char * s1, const char * s2) {
char * t1 = s1;
#endif
-#if NEED_STRNCAT
+#ifdef CONFIG_BUILT_IN_STRNCAT
char * strncat(char * s1, const char * s2, size_t limit) {
size_t i = 0;
char * t1;
-#if NEED_STRCPY
+#ifdef CONFIG_BUILT_IN_STRCPY
char * strcpy(char * dest, const char * src)
{
char *ret = dest;
#endif
-#if NEED_STRNCPY
+#ifdef CONFIG_BUILT_IN_STRNCPY
char * strncpy(char * dest, const char * src, size_t limit) {
char * ret = dest;
-#if NEED_STRDUP
+#ifdef CONFIG_BUILT_IN_STRDUP
char * strdup(const char * s1) {
char *ret;
-#if NEED_ATOI
+#ifdef CONFIG_BUILT_IN_ATOI
int atoi(const char * buf) {
int ret = 0;
#endif
-#if NEED_STRCHR
+#ifdef CONFIG_BUILT_IN_STRCHR
char * strchr(const char * s, int c) {
while (*s != '\0') {
if (*s == c)
#endif
-#if NEED_STRRCHR
+#ifdef CONFIG_BUILT_IN_STRRCHR
char * strrchr(const char * s, int c) {
size_t len = strlen(s);
const char * p = s + len;
}
#endif
-#if NEED_STRPBRK
+#ifdef CONFIG_BUILT_IN_STRPBRK
char * strpbrk(const char * s, const char * accept) {
size_t setLen = strlen(accept);