lp_bld_misc.cpp revision 07d741926b9a061d3d6608186d3cfbc681c386ae
18ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca/************************************************************************** 28ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * 38ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * Copyright 2010 VMware, Inc. 48ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * All Rights Reserved. 58ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * 68ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * Permission is hereby granted, free of charge, to any person obtaining a 78ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * copy of this software and associated documentation files (the 88ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * "Software"), to deal in the Software without restriction, including 98ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * without limitation the rights to use, copy, modify, merge, publish, 108ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * distribute, sub license, and/or sell copies of the Software, and to 118ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * permit persons to whom the Software is furnished to do so, subject to 128ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * the following conditions: 138ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * 148ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 158ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 168ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 178ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, 188ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 198ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 208ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * USE OR OTHER DEALINGS IN THE SOFTWARE. 218ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * 228ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * The above copyright notice and this permission notice (including the 238ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * next paragraph) shall be included in all copies or substantial portions 248ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * of the Software. 258ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * 268ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca **************************************************************************/ 278ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 288ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 298ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#ifndef __STDC_LIMIT_MACROS 308ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#define __STDC_LIMIT_MACROS 318ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#endif 328ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 338ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#ifndef __STDC_CONSTANT_MACROS 348ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#define __STDC_CONSTANT_MACROS 358ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#endif 368ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 378ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#include "llvm-c/Core.h" 388ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 3907d741926b9a061d3d6608186d3cfbc681c386aeJosé Fonseca#include "pipe/p_config.h" 408ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#include "util/u_debug.h" 418ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 428ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 432e524fd8bcf9448b3f0d082a96407f93c6d0204cJosé Fonseca#if (defined(PIPE_OS_WINDOWS) && !defined(PIPE_CC_MSVC)) || defined(PIPE_OS_EMBDDED) 442e524fd8bcf9448b3f0d082a96407f93c6d0204cJosé Fonseca 452e524fd8bcf9448b3f0d082a96407f93c6d0204cJosé Fonseca#include "llvm/Support/raw_ostream.h" 468ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 478ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonsecaclass raw_debug_ostream : 488ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca public llvm::raw_ostream 498ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca{ 508ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca uint64_t pos; 518ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 528ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca void write_impl(const char *Ptr, size_t Size); 538ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca uint64_t current_pos() { return pos; } 548ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca uint64_t current_pos() const { return pos; } 558ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 568ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#if HAVE_LLVM >= 0x207 578ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca uint64_t preferred_buffer_size() { return 512; } 588ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#else 598ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca size_t preferred_buffer_size() { return 512; } 608ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#endif 618ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca}; 628ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 638ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 648ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonsecavoid 658ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonsecaraw_debug_ostream::write_impl(const char *Ptr, size_t Size) 668ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca{ 678ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca if (Size > 0) { 688ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca char *lastPtr = (char *)&Ptr[Size]; 698ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca char last = *lastPtr; 708ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca *lastPtr = 0; 718ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca _debug_printf("%*s", Size, Ptr); 728ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca *lastPtr = last; 738ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca pos += Size; 748ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca } 758ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca} 768ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 778ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 788ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca/** 798ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca * Same as LLVMDumpValue, but through our debugging channels. 808ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca */ 818ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonsecaextern "C" void 828ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonsecalp_debug_dump_value(LLVMValueRef value) 838ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca{ 848ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca raw_debug_ostream os; 858ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca llvm::unwrap(value)->print(os); 868ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca os.flush(); 878ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca} 888ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 898ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 908ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#else 918ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 928ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 938ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonsecaextern "C" void 948ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonsecalp_debug_dump_value(LLVMValueRef value) 958ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca{ 968ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca LLVMDumpValue(value); 978ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca} 988ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 998ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca 1008ad3e0b55df50beac8ba3c5cafa0be79641a4977José Fonseca#endif 101